カスタマイズしやすいサムネイル連動スライダーをコピペで簡単実装。
jQueryに依存せず軽量なSwiperを使用することで、どんな環境でもさくさく動きやすい。
cssでのカスタマイズを初心者でも簡単に出来るような構造にしたサムネイル連動スライダー。
HTML
<!-- 事前に読み込むもの -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/Swiper/11.0.5/swiper-bundle.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/Swiper/11.0.5/swiper-bundle.min.js"></script>
<div class="ugkThumbsSlider">
<div class="swiper-area">
<!-- メイン -->
<div class="swiper ugkMainSlider">
<!-- Swiper wrapper -->
<div class="swiper-wrapper">
<!-- Slides -->
<div class="swiper-slide">
<img src="/animation/wp-content/uploads/2026/01/cat05.jpg" alt="">
</div>
<div class="swiper-slide">
<img src="/animation/wp-content/uploads/2026/01/cat04.jpg" alt="">
</div>
<div class="swiper-slide">
<img src="/animation/wp-content/uploads/2026/01/cat03.jpg" alt="">
</div>
<div class="swiper-slide">
<img src="/animation/wp-content/uploads/2026/01/cat02.jpg" alt="">
</div>
<div class="swiper-slide">
<img src="/animation/wp-content/uploads/2026/01/cat01.jpg" alt="">
</div>
<!-- /Slides -->
</div>
<!-- /Swiper wrapper -->
</div>
<!-- 左右矢印ボタンが必要な場合 -->
<div class="swiper-button-prev"><</div>
<div class="swiper-button-next">></div>
</div>
<!-- サムネイル -->
<div class="swiper ugkSubSlider">
<!-- Swiper wrapper -->
<div class="swiper-wrapper">
<!-- Slides -->
<div class="swiper-slide">
<img src="/animation/wp-content/uploads/2026/01/cat05.jpg" alt="">
</div>
<div class="swiper-slide">
<img src="/animation/wp-content/uploads/2026/01/cat04.jpg" alt="">
</div>
<div class="swiper-slide">
<img src="/animation/wp-content/uploads/2026/01/cat03.jpg" alt="">
</div>
<div class="swiper-slide">
<img src="/animation/wp-content/uploads/2026/01/cat02.jpg" alt="">
</div>
<div class="swiper-slide">
<img src="/animation/wp-content/uploads/2026/01/cat01.jpg" alt="">
</div>
<!-- /Slides -->
</div>
<!-- /Swiper wrapper -->
<!-- スクロールバーが必要な場合 -->
<div class="swiper-scrollbar"></div>
<!-- ページネーションが必要な場合 -->
<!--<div class="swiper-pagination"></div>-->
</div>
</div>
CSS
.ugkThumbsSlider {
width: 400px;
max-width: 100%;
margin: 0 auto;
position: relative;
}
.ugkThumbsSlider .swiper-area {
position: relative;
}
.ugkThumbsSlider img {
vertical-align: bottom;
width: 100%;
max-width: 100%;
}
.ugkThumbsSlider .swiper-button-next, .ugkThumbsSlider .swiper-button-prev {
height: 2em;
width: 2em;
background-color: #fff;
color: #333333;
font-weight: bold;
border-radius: 100px;
top: 50%;
transform: translateY(-50%);
margin: auto;
}
.ugkThumbsSlider .swiper-button-next:after, .ugkThumbsSlider .swiper-button-prev:after {
display: none;
}
.ugkThumbsSlider .swiper-pagination.swiper-pagination-horizontal {
position: relative;
bottom: auto;
}
.ugkThumbsSlider .swiper-scrollbar.swiper-scrollbar-horizontal {
position: relative;
bottom: auto;
margin-top: 10px;
}
.ugkThumbsSlider .swiper-pagination-bullet-active {
background-color: #333333;
}
.ugkSubSlider {
margin-top: 10px;
}
.ugkSubSlider .swiper-slide-thumb-active {
opacity: 0.1;
transition: all ease .3s;
}
JS
document.addEventListener('DOMContentLoaded', () => {
if (!document.querySelector('.ugkSlider__swiper')) return;
const fvSwiper = new Swiper('.ugkSlider__swiper', {
loop: true,
slidesPerView: 1,//スライド枚数
spaceBetween: 0,//スライド間の隙間(数字のみ)
pagination: {//ページネーションが必要な場合
el: '.ugkSlider .swiper-pagination',
},
navigation: {//左右矢印ボタンが必要な場合
nextEl: '.ugkSlider .swiper-button-next',
prevEl: '.ugkSlider .swiper-button-prev',
},
scrollbar: {//スクロールバーが必要な場合
el: '.ugkSlider .swiper-scrollbar',
},
});
});

コメント