メインのスライダーのナビゲーションをクリックしていき、5枚目に移る際、サムネイルのスライダーが連動せずに、6枚目に移行する際に連動してしまう例です。
この現象が発生するのは、スライドの総数(この例では 8)がサムネイルで表示するスライド数(この例では 4)の倍数になっていて、両方のスライダーの設定でループを有効にしている場合です。
<!-- メインのスライダー-->
<div class="swiper-container main-slider">
<div class="swiper-wrapper">
<div class="swiper-slide">
<img src="images/swiper_img_01.jpg" alt="" />
</div>
<div class="swiper-slide">
<img src="images/swiper_img_02.jpg" alt="" />
</div>
<div class="swiper-slide">
<img src="images/swiper_img_03.jpg" alt="" />
</div>
<div class="swiper-slide">
<img src="images/swiper_img_04x.jpg" alt="" />
</div>
<div class="swiper-slide">
<img src="images/swiper_img_05.jpg" alt="" />
</div>
<div class="swiper-slide">
<img src="images/swiper_img_06.jpg" alt="" />
</div>
<div class="swiper-slide">
<img src="images/swiper_img_07.jpg" alt="" />
</div>
<div class="swiper-slide">
<img src="images/swiper_img_08.jpg" alt="" />
</div>
</div>
<!-- end of .swiper-wrapper -->
<div class="swiper-button-prev"></div>
<div class="swiper-button-next"></div>
</div>
<!-- end of .swiper-container.main-slider -->
<!-- サムネイルのスライダー-->
<div class="swiper-container thumbs-slider">
<div class="swiper-wrapper">
<div class="swiper-slide">
<img src="images/swiper_img_01.jpg" alt="" />
</div>
<div class="swiper-slide">
<img src="images/swiper_img_02.jpg" alt="" />
</div>
<div class="swiper-slide">
<img src="images/swiper_img_03.jpg" alt="" />
</div>
<div class="swiper-slide">
<img src="images/swiper_img_04x.jpg" alt="" />
</div>
<div class="swiper-slide">
<img src="images/swiper_img_05.jpg" alt="" />
</div>
<div class="swiper-slide">
<img src="images/swiper_img_06.jpg" alt="" />
</div>
<div class="swiper-slide">
<img src="images/swiper_img_07.jpg" alt="" />
</div>
<div class="swiper-slide">
<img src="images/swiper_img_08.jpg" alt="" />
</div>
</div>
<!-- end of .swiper-wrapper -->
</div>
<!-- end of .swiper-container.thumbs-slider -->
* {
box-sizing: border-box;
}
.swiper-slide img {
max-width: 100%;
}
/* メインのスライダーのアクティブでないものは不透明度を 0.6 に */
.swiper-slide {
opacity: 0.6;
}
/* メインのスライダーでアクティブなもの(現在表示されている)は不透明度を 1 に */
.swiper-slide.swiper-slide-active {
opacity: 1;
}
/* サムネイルでアクティブなものには枠線を表示 */
.thumbs-slider .swiper-slide-thumb-active img {
border: 4px solid #F6B5B6;
}
/* アクティブでないサムネイル */
.thumbs-slider .swiper-slide {
opacity: 0.8;
}
/* アクティブなサムネイル */
.thumbs-slider .swiper-slide-thumb-active {
opacity: 1;
}
.swiper-pagination-bullet-active {
opacity: 1;
background: #fff;
}
この例では、メインとサムネイルのスライダーのループが両方とも有効になっています。サムネイルのスライダーのループを無効にすれば期待通りの動きになります(Sample 01)。
<script>
//サムネイルのスライダーの初期化
let mySwiperThumbs = new Swiper ('.thumbs-slider', {
loop: true, //ループを有効に
slidesPerView: 4,
spaceBetween: 10,
//各スライドの進行状況を監視
watchSlidesProgress: true,
//ビューポートにあるスライドに表示クラスを追加
watchSlidesVisibility: true,
//カーソルをデフォルトから grab に変更
grabCursor: true,
});
//メインのスライダーの初期化
let mySwiperMain = new Swiper ('.main-slider', {
loop: true, //ループを有効に
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
},
thumbs: {
//サムネイルのスライダーを指定
swiper: mySwiperThumbs
},
});
</script>