実装の考え方
スライダーライブラリとして1番使われているSwiperを使用して、サムネイル付きのスライダーの実装方法を紹介します。
サムネイルと連動させるには、親になるswiper
を2つ用意して、メインのスライダーの方にthumbs
をサムネイルになるスライダーに設定します。
バージョン情報
この記事で使用しているSwiperのライブラリのバージョンは以下の通りです。
- Swiper11.2.10
Swiperの読み込みに関しては、解説しませんが、import
かCDNでCSSファイルとJSファイルを読み込んでください。import
の例は下記のようになります。
import Swiper from 'swiper';
import 'swiper/css/bundle';
実装方法
それでは実際に実装していきましょう。
まずはHTMLになります。
HTML
<!-- メインのスライダー -->
<div class="swiper main-swiper">
<div class="swiper-wrapper">
<div class="swiper-slide">
<img src="https://picsum.photos/640/360?random=1" alt="">
</div>
<!-- スライダー枚数分追加 -->
</div>
<!-- スライダーの矢印ボタン -->
<div class="swiper-button-prev"></div>
<div class="swiper-button-next"></div>
</div>
<!-- サムネイルのスライダー -->
<div class="swiper thumbs-swiper">
<div class="swiper-wrapper">
<div class="swiper-slide">
<img src="https://picsum.photos/640/360?random=1" alt="">
</div>
<!-- スライダー枚数分追加 -->
</div>
<!-- スライダーのスクロールバー -->
<div class="swiper-scrollbar"></div>
</div>
スライダーとサムネイルが連動するように、main-swiper
とthumbs-swiper
の2つのスライダーを用意します。メインのスライダーは、main-swiper
に、サムネイルのスライダーはthumbs-swiper
になります。連動させるためにメインのスライダーとサムネイルのスライダーは同じ順番の画像にしましょう。
サムネイルのスライダーをスクロールバーでスクロールできるように、thumbs-swiper
の中にswiper-scrollbar
を追加しましょう。
CSS
サムネイルのスライダーと、スクロールバーについてのCSSについて解説します。
.thumbs-swiper {
margin-top: 0.5rem;
}
.thumbs-swiper .swiper-slide {
filter: brightness(0.5);
}
.thumbs-swiper .swiper-slide.swiper-slide-thumb-active {
filter: brightness(1);
}
.swiper-scrollbar {
position: static !important;
margin-top: 0.5rem;
}
メインのスライダーとサムネイルの間に余白を設けるために、margin-top
を設定しています。
サムネイルのスライダーの初期状態は、filter: brightness(0.5)
で暗くしています。メインのスライダーと連動して、現在表示されている画像のサムネイルには、swiper-slide-thumb-active
クラスが付与されるので、その際はfilter: brightness(1)
を使用してアクティブなサムネイルであることが分かるようになります。
スクロールバーのswiper-scrollbar
はデフォルトでは、position: absolute
で表示されるので、position: static
にすることで設定を切りましょう。
JavaScript
最後にJavaScriptを実装していきます。
まずは、メインのスライダーとサムネイルのスライダーを取得しましょう。
// メインのスライダーとサムネイルのスライダーを取得
const mainSwiperEl = document.querySelector('.main-swiper');
const thumbsSwiperEl = document.querySelector('.thumbs-swiper');
次はメインのスライダーの設定になります。
// メインのスライダーの設定
const mainSwiper = new Swiper(mainSwiperEl, {
slidesPerView: 1,
navigation: {
prevEl: '.swiper-button-prev',
nextEl: '.swiper-button-next',
},
thumbs: {
swiper: thumbsSwiperEl,
}
});
メインのスライダーとサムネイルのスライダーを連動させるために、thumbs
オプションを使用しthumbsSwiperEl
を指定します。このようにすることで連動させることが可能になります。
最後にサムネイルのスライダーの設定です。
const thumbsSwiper = new Swiper(thumbsSwiperEl, {
slidesPerView: 3,
freeMode: true,
watchSlidesProgress: true,
scrollbar: {
el: '.swiper-scrollbar',
draggable: true,
},
})
サムネイルのスライダーは3枚表示させるようにするため、slidesPerView
を3に設定します。freeMode
をtrue
にすることで、サムネイルのスライダーを自由にスクロールできるようにします。また、watchSlidesProgress
をtrue
にすることで、サムネイルのスライダーの現在の位置を監視し、メインのスライダーと連動させることが可能になります。
スクロールバーを機能させるためには、scrollbar
オプションを使用し、el
にスクロールバーの要素(.swiper-scrollbar
)を指定します。draggable
をtrue
にすることで、スクロールバーをドラッグしてスクロールできるようにします。
以上が、Swiperでサムネイル付きのスライダーの実装方法になります。
ぜひ、この実装方法を参考にして、サムネイル付きのスライダーを実装してみてください!