WebDesigner's Memorandumウェブデザイナーの備忘録

スライドを簡単に実装できるJavaScriptライブラリ「Swiper」

スライドを簡単に実装できるJavaScriptライブラリ「Swiper」

Swiperというライブラリを使うと、スライドが簡単に実装できます。
jQueryにも依存していないピュアなJavaScriptのライブラリなので、かなり重宝しています。

  • オプションが豊富でカスタマイズしやすい
  • jQueryに依存しない
  • スマホにも対応している

Swiperのインストール

Swiperの公式サイト

ローカルにファイルを設置したい場合は公式サイトからswiper.min.cssとswiper.min.jsをダウンロードして読み込みます。

CDNでの使用もできて、その場合は下記のコードを読み込みます。

<link rel="stylesheet" href="https://unpkg.com/swiper/css/swiper.min.css">
<script src="https://unpkg.com/swiper/js/swiper.min.js"></script>

Swiperの使い方

スライドを使いたい場所に下記のHTMLを記述します。

<div class="swiper-container">
  <div class="swiper-wrapper">
    <div class="swiper-slide">スライドの内容1</div>
    <div class="swiper-slide">スライドの内容2</div>
    <div class="swiper-slide">スライドの内容3</div>
  </div>
  <div class="swiper-pagination"></div>
  <div class="swiper-button-prev"></div>
  <div class="swiper-button-next"></div>
</div>

あとは下記のJavaScriptでスライドが作成できます。

var mySwiper = new Swiper ('.swiper-container', {
  effect: "slide",
  loop: true,
  navigation: {
    nextEl: '.swiper-button-next',
    prevEl: '.swiper-button-prev',
  },
  pagination: {
    el: '.swiper-pagination'
  }
});

See the Pen Swiper_basic by Masakazu Saito (@31mskz10) on CodePen.

左右のナビゲーション設定

左右のナビゲーションを設定したいときは下記のコードをJavaScriptに追加しつつ、.swiper-container内にHTMLを追加します。

navigation: {
  nextEl: '.swiper-button-next',
  prevEl: '.swiper-button-prev',
}

.swiper-button-nextと.swiper-button-prevであればSwiperのデフォルトCSSが反映されます。

基本的にはそこからCSSを上書きして使う方がラクそうです。

ページネーション設定

ページネーションを設定したいときは下記のコードをJavaScriptに追加しつつ、.swiper-container内にHTMLを追加します。

pagination: {
  el: '.swiper-pagination'
}

こちらも.swiper-paginationだとSwiperのデフォルトCSSが反映されます。

Swiperのオプション

Swiperのオプションはかなり多く、バージョンアップによって新しく追加されたり、変更も結構されます。

基本は公式のドキュメントを見てください(下記の表は公式のドキュメントを簡単に訳したものです)。

オプション名初期値内容
inittrueスライド生成時にスライドを初期化するかどうか
updateOnWindowResizetrueウインドウのサイズ変更時にスライドの位置を再計算する
initialSlide0最初に表示させるスライド番号(1番目が0)
direction‘horizontal’スライドの方向を横(’horizontal’)か縦(’vertical’)を選択する
speed300スライドの速度をミリ秒で指定
setWrapperSizefalse.swiper-wrapperに全てのスライドの合計の幅が自動で設定される
virtualTranslatefalseアニメーションのtransformが削除される
(自分でアニメーションを作成したい場合に使用)
widthfalseスライドの幅を指定します
heightfalseスライドの高さを指定します
autoHeightfalsetrueにすると、スライドの高さが内容に応じて変わるようになる
roundLengthsfalseスライドの中身のwidthやheightの小数点以下が四捨五入される
中の画像がぼけるときにtrueにするとキレイになる場合がある
nestedfalsetrueにすると入れ子になったスライドのタッチイベントが正常に取得できる
uniqueNavElementstrueページネーションの1つ目をクリックすると1つ目のスライドに移動するようになる
effect‘slide’スライダーのアニメーションを’slide’、’fade’、’cube’、’coverflow’、’flip’から選択する
runCallbacksOnInittrueスライダーの初期化時にTransition / SlideChange・Start / Endイベントを発火させる
watchOverflowfalsetrueにすると、スライドの枚数が1枚しかないときにボタンやページネーションを削除する
on イベントハンドラを登録できる
cssModefalsetrueにするとCSS Scroll Snap APIが使用される
spaceBetween0スライド間の距離をpx単位で設定する
slidesPerView11画面で見えるスライド枚数を指定する
slidesPerColumn1列ごとのスライド枚数を指定する
slidesPerColumnFill‘column’slidesPerColumnを指定したときに、列(’column’)をベースするか、
行(’row’)をベースにするか指定する
slidesPerGroup1スライドグループ化して1つにまとめる
slidesPerGroupSkip0グループ化した複数スライドをスキップする設定
(グループ化する数はslidesPerGroupの値になる)
centeredSlidesfalsetrueにするとスライドのスタートが真ん中になる
falseだと左端がスタートになる
centeredSlidesBoundsfalsetrueにすると、アクティブなスライドはスライダーの最初と最後にギャップを追加せず真ん中に配置される
slidesOffsetBefore0スライドの前に追加の余白を設定する
slidesOffsetAfter0スライドの後に追加の余白を設定する
normalizeSlideIndextruetrueだとslidesPerGroupとcenteredSlidesを使っているときに、
1枚目の認識がズレてしまっているのを修正してくれる
centerInsufficientSlidesfalsetrueだとスライド枚数がslidePerView未満の場合にスライドを中央に配置する
grabCursorfalsetrueだとカーソルがgrabになる
touchEventsTarget‘container’タッチイベントの対象をcontainerにするかwrapperにするか設定する
touchRatio1次のスライドにいくまでのスワイプ感度を設定する
数字が大きければ大きいほど、少しスワイプしただけで次のスライドに切り替わる
touchAngle45スワイプを認識する角度を設定する
simulateTouchtruetrueだとタッチイベントをマウスイベントのように認識する
shortSwipestruetrueだとタッチ時間の短いスワイプも有効にする
longSwipestruetrueだとタッチ時間が長いスワイプも有効にする
longSwipesRatio0.5タッチ時間の長いスワイプ時に、どのくらいの比率次のスライドが見えていたら
次のスライドに移動するか設定する
longSwipesMs300タッチ時間の長いスワイプで、どのくらい経過したら次のスライドへ移動するのを
キャンセルするかミリ秒で設定する
followFingertruetrueだとスワイプ時に前後のスライドの内容が見れる
allowTouchMovetruetrueだとスワイプできるようになる。
falseだとナビゲーションでしかスワイプができなくなる
threshold0設定した数値分スワイプしないとスライダーが動かなくなる
touchStartPreventDefaultfalsetrueだとtouchstartイベントが動かなくなる
touchStartForcePreventDefaultfalsetrueだとイベントのデフォルトを常に禁止する
touchMoveStopPropagationtruetrueだとイベントのバブリングを防ぐ
iOSEdgeSwipeDetectionfalseiOSのUIWebViewでのスワイプイベントを有効にする
iOSEdgeSwipeThreshold20iOSのUIWebViewで画面左端から設定した数より小さい範囲では
スワイプイベントが有効にならない
touchReleaseOnEdgesfalsetrueだとスワイプ時も画面がスクロールできるようになる
passiveListenerstruetrueだとスマホでのパフォーマンスを高める
resistancetrue最初のスライドから最初のスライドへ移動するときのバウンスアニメーションに
抵抗するようなアニメーションがつく
resistanceRatio0.85resistanceの抵抗力を設定する
preventIntercationOnTransitionfalseスワイプの最中に別スライドに移動できなくなる
allowSlidePrevtruetrueだと前のスライドへ移動できるようになる
allowSlideNexttruetrueだと次のスライドへ移動できるようになる
noSwipingtruenoSwipingClassで設定したClassが付いたスライドはスワイプできなくなる
noSwipingClass‘swiper-no-swiping’noSwiping用のClassを指定する(noSwipingがtrue前提)
noSwipingSelector セレクタを指定すると、そのセレクタ上ではスワイプできなくなる
swipeHandlernullスワイプに使用するセレクタを指定する
preventClickstruetrueだとスワイプ中にリンクがクリックできないようになる
preventClicksPropagationtruetrueだとスワイプ中にリンク上のクリックイベントの停止させる
slideToClickedSlidefalsetrueだと任意のスライドへの遷移が生成される
freeModefalsetrueだとスライド位置が固定されない
freeModeMomentumtruetrueだとスワイプしてカーソルを離したあとに、スライドがしばらく動くようになる
freeModeMomentumRatio1値が大きいほどスライダーを離したあとの距離が大きくなる
freeModeMomentumVelocityRatio1値が大きいほどスライダーを離したあとの速度が速くなる
freeModeMomentumBouncetruetrueだとバウンスアニメーションが付く
freeModeMomentumBounceRatio1値が大きいほどバウンス効果が大きくなる
freeModeMinimumVelocity0.02フリーモードの勢いが発生するために必要な、最小タッチ移動速度を設定する
freeModeStickyfalsetrueだとフリーモードでスライド位置へのスナップが有効になる
watchSlidesProgressfalsetrueだとプログレスバー(進行状況の表示)を計算するようになる
watchSlidesVisibilityfalseスライドに追加の表示クラスが追加される
(watchSlidesProgressが有効である必要がある)
preloadImagestruetrueにするとすべての画像を強制的にロードする
updateOnImagesReadytruetrueにするとすべての画像がロードされたあとにSwiperが再初期化される
loopfalse最後のスライドの次に、最初のスライドに戻るようになる
loopAdditionalSlides0ループの実行時に複製されるスライドの追加番号の設定
loopedSlidesnullループ時に複製するスライドの数を設定
loopFillGroupWithBlankfalsetrueにするとスライドグループに空のスライドが作成される
observerfalsetrueにするとSwiperのスタイルが変更されたり子要素を変更されるたびに再初期化される
observeParentstrueSwiperの親要素もobserverの設定がされる
observeSlideChildrenfalseSwiperの子要素のobserverの設定がされる

class名の管理

下記のオプションを使うと、class名の変更ができます。

しかし、実際に運用するときはclass名を変えてしまうとあとで訳が分からなくなってしまうのでオススメしません(特に複数人が関わる実装の場合)。

オプション名初期値内容
containerModifierClass‘swiper-container’Swiperを包括しているClass名の設定
wrapperClass‘swiper-wrapper’スライドのラッパーのClass名
slideClass‘swiper-slide’スライドのClass名
slideActiveClass‘swiper-slide-active’現在アクティブなスライドのClass名
slideDuplicatedActiveClass‘swiper-slide-duplicate-active’アクティブなスライドの複製されたスライドのClass名
slideVisibleClass‘swiper-slide-visible’現在表示されているスライドのClass名
slideDuplicateClass‘swiper-slide-duplicate’loopで複製されたスライドのClass名
slideNextClass‘swiper-slide-next’アクティブなスライドの次のClass名
slideDuplicatedNextClass‘swiper-slide-duplicate-next’アクティブなスライドの次の複製されたスライドのClass名
slidePrevClass‘swiper-slide-prev’アクティブなスライドの前のClass名
slideDuplicatedPrevClass‘swiper-slide-duplicate-prev’アクティブなスライドの前の複製されたスライドのClass名

class名を変える代わりにオススメしたいのが、class名の追加です。

レスポンシブの設定

JavaScriptにbreakpointsを追加するとレスポンシブの設定ができます。

breakpoints: {
  // 320px以下の場合
  320: {
    slidesPerView: 1,
    spaceBetween: 10
  },
  // 480px以下の場合
  480: {
    slidesPerView: 2,
    spaceBetween: 20
  },
  // 640px以下の場合
  640: {
    slidesPerView: 3,
    spaceBetween: 30
  }
}

ブレークポイントは自分で指定して、その中にオプションを追加して指定します。

著者について

プロフィール画像

サイトウ マサカズ@31mskz10

1997年生まれ。2016年から専門学校でデザインについて勉強。卒業後は神戸の制作会社「N'sCreates」にウェブデザイナーとして入社。このブログでは自分の備忘録も兼ねて、ウェブに関する記事や制作環境を効率的に行うための記事を書いています。

Twitterをフォロー Facebookでいいね