jQueryなしでスライドショーを作成できるjavascriptライブラリに関するガイド
公式:

参考:
SwiperをCodePenで試す方法
CodePen↓(Facebookでログイン)
左バーCreateのPenの右にある「>」をクリック
「From Template」から「Swiper-template」をクリック。
See the Pen Swiper-template by sakana27 (@haradaLupe) on CodePen.
ブログにコードペンをはりつけるには、
CodePen右下「Embed」> HTML形式でコピー > WordPress「カスタムHTML」を選択し貼り付け
Swiperの導入方法
SwiperのデフォルトのCSS
以下に一部抜粋
.swiper-container {
margin-left: auto;
margin-right: auto;
position: relative;
overflow: hidden;
list-style: none;
padding: 0;
/* Fix of Webkit flickering */
z-index: 1;
}
.swiper-wrapper {
position: relative;
width: 100%;
height: 100%;
z-index: 1;
display: flex;
transition-property: transform;
box-sizing: content-box;
}
.swiper-slide {
flex-shrink: 0;
width: 100%;
height: 100%;
position: relative;
transition-property: transform;
}
.swiper-button-prev,
.swiper-button-next {
position: absolute;
top: 50%;
width: calc(var(--swiper-navigation-size) / 44 * 27);
height: var(--swiper-navigation-size);
margin-top: calc(-1 * var(--swiper-navigation-size) / 2);
z-index: 10;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
color: var(--swiper-navigation-color, var(--swiper-theme-color));
}
.swiper-pagination {
position: absolute;
text-align: center;
transition: 300ms opacity;
transform: translate3d(0, 0, 0);
z-index: 10;
}
.swiper-pagination-bullet {
width: 8px;
height: 8px;
display: inline-block;
border-radius: 100%;
background: #000;
opacity: 0.2;
}テーマカラー
Swiper の CSS には CSS 変数を使ってテーマカラーやナビゲーションのサイズなどが設定されています。swiper.css(抜粋)
:root {
--swiper-theme-color: #007aff;
}
:root {
--swiper-navigation-size: 44px;
/*
--swiper-navigation-color: var(--swiper-theme-color);
*/
}
:root {
/*
--swiper-pagination-color: var(--swiper-theme-color);
*/
}例えば、以下のような独自の CSS でスタイルを設定(上書き)すると、ナビゲーションの色を黒(#000000)に、ページネーションの色を白(#ffffff)に変更することができます。独自の CSS
:root {
--swiper-navigation-color: #000000;
--swiper-pagination-color: #ffffff;
}| パラメータ | データ型 | デフォルト | 説明 |
|---|---|---|---|
| initialSlide | number | 0 | 開始するスライドのインデックスを指定(0 が1番目のスライド) |
| direction | string | 'horizontal' | スライド方向を指定。 'horizontal':水平(横)方向、 'vertical':垂直(縦)方向。'vertical'を指定した場合はコンテナに height や max-height を指定。 |
| speed | number | 300 | スライドのスピードをミリ秒で指定 |
| autoHeight | boolean | false | true を指定すると現在のスライドに合わせて高さを自動的に調整 |
| effect | string | 'slide' | スライドのエフェクトを指定。指定できるエフェクトは "slide", "fade", "cube", "coverflow" "flip" |
| spaceBetween | number | 0 | スライド間の余白を px で指定。要素にマージンを指定している場合、ナビゲーションが正常に機能しない可能性あり |
| slidesPerView | number or 'auto' | 1 | 一度に表示するスライドの数。auto を指定して同時に loop: true を設定する場合は、loopedSlides パラメータを指定する必要あり |
| slidesPerGroup | number | 1 | 同時にスライドさせるスライドの数 |
| centeredSlides | boolean | false | true を指定するとアクティブなスライドを中央に配置(通常アクティブなスライドは左端に配置) |
| loop | boolean | false | true を指定するとスライドをループモードにします(最後に達したら先頭に戻る)。その場合、ループの構造上、前後に複製されたスライドが生成され、それらには swiper-slide-duplicate などのクラスが付与されます。 |
| loopedSlides | number | null | slidesPerView に auto を設定した場合、このパラメータで(前後に)複製するスライドの数を指定します。 |
| breakpoints | object | ブレークポイント(画面サイズ)ごとにそれぞれ異なるパラメータを設定できます。 | |
| on | object | イベントの登録 |
イベント(Events)
Swiper には数多くのイベントも用意されていて、カスタマイズする際に利用することができます。
利用可能なイベントは「API/Events」に掲載されています。
また、個々のコンポーネントごとにもイベントが用意されているものもあり、API ページの各コンポーネントの項目で確認することができます。
イベント(リスナー)を登録するには以下の2つの方法があります。
on パラメータ
初期化の際に on パラメータを使ってイベントを登録できます。
let mySwiper = new Swiper('.swiper-container', { // 初期化の際に登録
// ...初期化の処理
on: {
init: function () {
console.log('swiper initialized');
},
},
};on メソッド
初期化の後に on メソッドを使ってイベントを登録することもできます。
let mySwiper = new Swiper('.swiper-container', {
// ...初期化の処理
};
// 初期化の後で Swiper のインスタンスの on メソッドで登録
mySwiper.on('slideChange', function () {
console.log('slide changed');
});以下の例は初期化の際に init イベントでナビゲーションボタンに swiper-button-white というクラスを指定して色を白に変更しています。また初期化の後では on メソッドで slideChange イベントに現在のスライド番号をコンソールに出力する処理を登録しています。
let mySwiper01 = new Swiper ('#swiper01', {
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
},
on: { // 初期化の際に init イベントを登録
init: function () {
const prev_btn = document.querySelector('#swiper01 .swiper-button-prev');
const next_btn = document.querySelector('#swiper01 .swiper-button-next');
prev_btn.classList.add('swiper-button-white');
next_btn.classList.add('swiper-button-white');
},
},
})
// 初期化の後で slideChange イベントを登録(初期化の際に登録することも可能)
mySwiper01.on('slideChange', function () {
console.log('現在のスライド番号: ' + (this.activeIndex + 1));
});イベントハンドラ(処理登録)の中で this は常に Swiper のインスタンスを意味します。上記の場合、this.activeIndex は mySwiper01.activeIndex と同じです。
上記のコンソールに出力する処理では Swiper インスタンスのプロパティ activeIndex を参照しています。
| イベント名 | 意味 |
|---|---|
| slideChange | スライドが遷移する(変わる)ときに発火 |
| reachBeginning | 最初のスライド(初期位置)に達したときに発火 |
| reachEnd | 最後のスライドに達したときに発火 |
イベントの例 API/Events
プロパティやメソッド
初期化でインスタンスを生成した後では、Swiper インスタンスのプロパティやメソッドを使用することができます。Swiper インスタンスのプロパティやメソッドは「Slider Methods & Properties」に掲載されています。
また、イベント同様、コンポーネントごとに用意されているプロパティやメソッドもあります。
| プロパティ名 | 意味 |
|---|---|
| .width | コンテナの幅 |
| .height | コンテナの高さ |
| .activeIndex | アクティブなスライドのインデックス |
| .realIndex | ループモードでの複製されたスライドを考慮したアクティブなスライドのインデックス |
| メソッド名 | 意味 |
|---|---|
| .slideNext(); | 次のスライドへ移行 |
| .slideTo(index); | 指定したインデックスのスライドへ移行 |
| .on(event, handler) | イベント を登録 |
| .off(event) | 登録されたイベントを解除 |
コントロール
ナビゲーションボタンやページネーション、スクロールバーを表示するにはそれらの要素を HTML に記述して初期化の際にオプションで指定します。
また、デフォルトのスタイルを変更するには追加の CSS で上書き(設定)します。
ナビゲーション(Navigation)
ナビゲーション(前後のスライドへのボタン)を表示するには HTML に swiper-button-prev と swiper-button-next クラスの div 要素を記述します。
初期化の際には以下のパラメータを指定することができます。
| パラメータ | データ型 | デフォルト | 説明 |
|---|---|---|---|
| nextEl | string | null | 「次へ」ボタンの要素の CSS セレクタまたは HTML 要素 |
| prevEl | string | null | 「前へ」ボタンの要素の CSS セレクタまたは HTML 要素 |
| hideOnClick | boolean | false | スライダーのコンテナをクリックしたらナビゲーションの表示・非表示をトグルする(機能しない?) |
| disabledClass | string | 'swiper-button-disabled' | ナビゲーションボタンが無効(disabled)な場合に付加されるクラス名 |
| hiddenClass | string | 'swiper-button-hidden' | ナビゲーションボタンが非表示の場合に付加されるクラス名 |
以下はナビゲーションのデフォルトのスタイルです。
.swiper-button-prev,
.swiper-button-next {
position: absolute;
top: 50%;
width: calc(var(--swiper-navigation-size) / 44 * 27);
height: var(--swiper-navigation-size);
margin-top: calc(-1 * var(--swiper-navigation-size) / 2);
z-index: 10;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
color: var(--swiper-navigation-color, var(--swiper-theme-color));
}
.swiper-button-prev.swiper-button-white,
.swiper-button-next.swiper-button-white {
--swiper-navigation-color: #ffffff;
}
.swiper-button-prev.swiper-button-black,
.swiper-button-next.swiper-button-black {
--swiper-navigation-color: #000000;
}
.swiper-button-prev.swiper-button-disabled,
.swiper-button-next.swiper-button-disabled {
opacity: 0.35;
cursor: auto;
pointer-events: none;
}
.swiper-button-prev:after,
.swiper-button-next:after {
font-family: swiper-icons;
font-size: var(--swiper-navigation-size);
text-transform: none !important;
letter-spacing: 0;
text-transform: none;
font-variant: initial;
}ページネーション(Pagination)
ページネーション(何枚目のスライドかを示すアイコン)を表示するには、 HTML に swiper-pagination クラスの div 要素を記述します。
<div class="swiper-pagination"></div>
<!-- 以下のクラスを追加指定するとデフォルトの青から白や黒に変更可能 -->
<!-- 白色のページネーション .swiper-pagination-white -->
<div class="swiper-pagination swiper-pagination-white"></div>
<!-- 黒色のページネーション .swiper-pagination-black -->
<div class="swiper-pagination swiper-pagination-black"></div>
そして初期化の際にオプションの pagination を指定して必要なパラメータを設定します。
let mySwiper = new Swiper('.swiper-container', {
pagination: {
el: '.swiper-pagination', //ページネーションの要素のセレクタ
type: 'bullets', //ページネーションのタイプ
},
});| パラメータ | データ型 | デフォルト | 説明 |
|---|---|---|---|
| el | string | null | ページネーションの要素の CSS セレクタまたは HTML 要素 |
| type | string | 'bullets' | タイプ(表示形態)を指定。"bullets", "fraction", "progressbar" または "custom" を指定可能 |
| bulletElement | string | 'span' | type で bullets を指定した場合に、それぞれのアイコンを表示する HTML 要素を指定。 |
| dynamicBullets | boolean | false | スライドが多数ある場合に、ページネーションのすべてのアイコンを表示せずに dynamicMainBullets で指定した数のアイコンを表示。 |
| dynamicMainBullets | number | 1 | dynamicBullets が有効(true)の場合に表示するメインアイコンの数 |
| clickable | boolean | false | true を指定すると、ページネーションのアイコンをクリックすると対応するスライドを表示 |
| renderBullet | function | null | bullets タイプのページネーションのアイコンをカスタマイズする際に使用。引数にインデックスとアイコンの要素のクラス名(className)を取る関数を指定。function(index, className){ アイコンの HTML を返す }。CSS でスタイルを指定(サンプル参照) |
| bulletClass | string | 'swiper-pagination-bullet' | bullets タイプのページネーションのアイコンに付与されるクラス |
| bulletActiveClass | string | 'swiper-pagination-bullet-active' | bullets タイプのアクティブなページネーションのアイコンに付与されるクラス |
スクロールバー(Scrollbar)
スクロールバーを表示するには、HTML に swiper-scrollbar クラスの div 要素を記述します。スクロールバーの HTML
<div class="swiper-scrollbar"></div>
そして初期化の際にオプションの scrollbar を指定して必要なパラメータを設定します
let mySwiper = new Swiper('.swiper-container', {
scrollbar: {
el: '.swiper-scrollbar', //スクロールバーの要素のセレクタ
draggable: true, //スクロールバーをドラッグ可能にする
},
});初期化の際には以下のパラメータを指定することができます
| パラメータ | データ型 | デフォルト | 説明 |
|---|---|---|---|
| el | string | null | スクロールバーの要素の CSS セレクタまたは HTML 要素 |
| hide | boolean | false | true を指定するとユーザーが操作を終了すると自動的に非表示になる |
| draggable | boolean | false | true を指定するとユーザーがスクロールバーをドラッグしてスライドを操作できる |
以下はスクロールバーのデフォルトのスタイルの一部です。
/* Scrollbar */
.swiper-scrollbar {
border-radius: 10px;
position: relative;
-ms-touch-action: none;
background: rgba(0, 0, 0, 0.1);
}
.swiper-container-horizontal > .swiper-scrollbar {
position: absolute;
left: 1%;
bottom: 3px;
z-index: 50;
height: 5px;
width: 98%;
}
.swiper-container-vertical > .swiper-scrollbar {
position: absolute;
right: 3px;
top: 1%;
z-index: 50;
width: 5px;
height: 98%;
}draggable: true を設定したスクロールバーとナビゲーションを表示する例↓
See the Pen draggable: true を設定したスクロールバーとナビゲーションを表示する例 by sakana27 (@haradaLupe) on CodePen.
自動再生(Autoplay)
自動的にスライドを開始(再生)させる場合は autoplay を設定します
| パラメータ | データ型 | デフォルト | 説明 |
|---|---|---|---|
| delay | number | 3000 | スライド間の間隔をミリ秒で指定。この値を指定しない場合は自動再生は無効になります。この設定と異なる値を個別のスライドに設定する場合は、スライドの要素(.swiper-slide)に data-swiper-autoplay 属性を設定してミリ秒の値を指定します。 |
| stopOnLastSlide | boolean | false | true を指定すると、最後のスライドに達したら停止します。但し、ループモード では無効です。 |
| disableOnInteraction | boolean | true | ユーザが操作したら自動再生をストップさせる設定です。false を指定すると操作があっても自動再生を継続します。 |
| reverseDirection | boolean | false | true を指定すると、逆方向に自動再生します。 |
以下はループモードでスライドの間隔を2秒(2000ミリ秒)に設定して自動再生するれいです。 data-swiper-autoplay を指定して、最後のスライドは5秒遅延させています。
デフォルトで disableOnInteraction は true なので、ナビゲーションやページネーションをクリックしたり、スワイプするとスライドは停止します。
See the Pen AutoPlayデフォルト(最後スライドだけ遅延させる) by sakana27 (@haradaLupe) on CodePen.
メソッドやイベント
Autoplay のメソッドやイベントには以下のようなものがあります。
| メソッド | 意味 |
|---|---|
| .autoplay.start(); | 自動再生を開始 |
| .autoplay.stop(); | 自動再生を停止 |
| イベント名 | 意味 |
|---|---|
| autoplayStart | 自動再生が開始されたときに発火 |
| autoplayStop | 自動再生が停止されたときに発火 |
| autoplay | 自動再生でスライドが遷移する(変わる)ときに発火 |
サンプルコード
Coverflowを使ったスライド
See the Pen RwpRvwz by sakana27 (@haradaLupe) on CodePen.
マウスホバー時にネクスト・プレビュのナビゲーションを出現させる
See the Pen RwpRvyW by sakana27 (@haradaLupe) on CodePen.
ページネーションのデザインを変更する
See the Pen ページネーションのデザインを変更する by sakana27 (@haradaLupe) on CodePen.
ページネーションを「1 / 3」の形式にする
See the Pen ページネーション表示を「1 / 3」形式にする by sakana27 (@haradaLupe) on CodePen.
AutoPlayのサンプルコード
1枚目のスライドに戻ってから自動再生を終了する
See the Pen 最初のスライドに戻った時点で停止する by sakana27 (@haradaLupe) on CodePen.
画像以外のコンテンツも含んだスライダー
See the Pen RwpROqd by sakana27 (@haradaLupe) on CodePen.
文字をアニメーションで表示する
上記にCSSのコードを追加しただけ
See the Pen 文字をアニメーションで表示する by sakana27 (@haradaLupe) on CodePen.
前述の例では、要素に対してアニメーションを適用していましたが、以下のように要素にクラスを付与してそのクラスにアニメーションを適用したほうが管理しやすくなると思います。
アニメーションを適用する要素に個別のアニメーションのクラス(例 .from_top)を指定しておきます。HTML (スライド部分の抜粋)
<div class="swiper-slide">
<div class="slide-img"><img src="images/swiper_img_01.jpg" alt=""></div>
<div class="slide-content">
<h1 class="from_top">Slide Title 01</h1><!-- アニメーション適用 -->
<p>Lorem ipsum dolor sit amet, consectetur</p>
<div class="caption">caption 01</div>
</div>
</div>
<div class="swiper-slide">
<div class="slide-img"><img src="images/swiper_img_02.jpg" alt=""></div>
<div class="slide-content">
<h2 class="from_left">Slide Title 02</h2><!-- アニメーション適用 -->
<p class="from_right">Ipsa, quis ex repudiandae eum </p><!--アニメーション適用-->
<div class="caption">caption 02</div>
</div>
</div>
<div class="swiper-slide">
<div class="slide-img"><img src="images/swiper_img_03.jpg" alt=""></div>
<div class="slide-content">
<h3 class="from_bottom">Slide Title 03</h3><!-- アニメーション適用 -->
<p>Ullam rerum quasi libero esse </p>
<div class="caption">caption 03</div>
</div>
</div>この例では以下のような4つの異なるアニメーションを用意しています。
CSS
@keyframes fromTop {
0% {
top: 0%;
opacity: 0;
}
100% {
top: 20%;
opacity: 1;
}
}
@keyframes fromBottom {
0% {
top: 80%;
opacity: 0;
}
100% {
top: 20%;
opacity: 1;
}
}
@keyframes fromleft {
0% {
left: 0%;
opacity: 0;
}
100% {
left: 50%;
opacity: 1;
}
}
@keyframes fromRight {
0% {
left: 100%;
opacity: 0;
}
100% {
left: 50%;
opacity: 1;
}
}
/* .from_top を指定した要素のアニメーション */
.swiper-slide-active .from_top {
animation: fromTop .6s ease-in-out 0s 1 normal both;
}
/* .from_bottom を指定した要素のアニメーション */
.swiper-slide-active .from_bottom {
animation: fromBottom .6s ease-in-out 0s 1 normal both;
}
/* .from_left を指定した要素のアニメーション */
.swiper-slide-active .from_left {
animation: fromleft .6s ease-in-out 0s 1 normal both;
}
/* .from_right を指定した要素のアニメーション */
.swiper-slide-active .from_right{
animation: fromRight .6s ease-in-out .5s 1 normal both;
}
