ポートフォリオなどで使えるサムネイルが縦に並んだスライダー

※当サイトにはプロモーションが含まれています。

クライアントクライアント

自社の商品を紹介するのに縦のスライダーを作ってくれ

にゃテックにゃテック

おけまるだにゃ

今回、紹介するサムネイルが縦に並んだスライダーは、製品ギャラリーポートフォリオサイト不動産サイトなどに使えるのではないかと思います。

動作確認は、こちらから可能です。

サムネイル画像が縦に並んだスライダーのデモを確認

サムネイルが縦のスライダーを作成してみた

サムネイル画像が縦に並び、それぞれ順番に表示していくスライダーです。

HTML

<div class="vertical-slider">
<ul id="main-vertical-1" class="list-slider" data-offer-id="1">
<li id="offer-slide-1-0"><img class="image" src="https://via.placeholder.com/600/FF0000/FFFFFF" alt="赤い画像"></li>
<li class="d-none" id="offer-slide-1-1"><img class="image" src="https://via.placeholder.com/600/00FF00/FFFFFF" alt="緑の画像"></li>
<li class="d-none" id="offer-slide-1-2"><img class="image" src="https://via.placeholder.com/600/0000FF/FFFFFF" alt="青い画像"></li>
<li class="d-none" id="offer-slide-1-3"><img class="image" src="https://via.placeholder.com/600/FFFF00/FFFFFF" alt="黄色の画像"></li>
<li class="d-none" id="offer-slide-1-4"><img class="image" src="https://via.placeholder.com/600/FF00FF/FFFFFF" alt="マゼンタの画像"></li>
</ul>
<ul id="thumbnail-1" class="list-thumbnail">
<li data-offer-id="1" data-thumb-num="0" id="thumb-1-0" class="thumb-opacity"><img class="image" src="https://via.placeholder.com/200/FF0000/FFFFFF" alt="赤い画像"></li>
<li data-offer-id="1" data-thumb-num="1" id="thumb-1-1"><img class="image" src="https://via.placeholder.com/200/00FF00/FFFFFF" alt="緑の画像"></li>
<li data-offer-id="1" data-thumb-num="2" id="thumb-1-2"><img class="image" src="https://via.placeholder.com/200/0000FF/FFFFFF" alt="青い画像"></li>
<li data-offer-id="1" data-thumb-num="3" id="thumb-1-3"><img class="image" src="https://via.placeholder.com/200/FFFF00/FFFFFF" alt="黄色の画像"></li>
<li data-offer-id="1" data-thumb-num="4" id="thumb-1-4"><img class="image" src="https://via.placeholder.com/200/FF00FF/FFFFFF" alt="マゼンタの画像"></li>
</ul>
</div>

CSS

/*---- メインとサムネイルの分割 ----*/
.vertical-slider {
display: flex;
justify-content: center;
}

/*---- メイン部分 ----*/
.list-slider {
flex: 0 0 79%;
margin-right: 15px;
list-style: none;
padding: 0;
}

/*---- サムネイル部分 ----*/
.list-thumbnail {
height: 100%;
flex-direction: column;
display: flex;
justify-content: space-between;
flex: 0 0 14%;
list-style: none;
padding: 0;
}

.list-thumbnail li {
cursor: pointer;
margin-bottom: 8px;
flex: 0 0 18%;
}

.list-thumbnail li:last-child {
margin-bottom: 0;
}

.list-thumbnail li.thumb-opacity img {
opacity: 0.6;
}

/*---- 画像の表示・非表示 ----*/
.d-none {
display: none;
}

.image {
width: 100%;
height: auto;
}

@media (max-width: 767px) {
.list-thumbnail {
display: none;
}
}

JavaScript

document.addEventListener("DOMContentLoaded", function() {
let currentIndex = 0;
const offerId = 1;
const mainVertical = document.getElementById('main-vertical-' + offerId);
const totalSlides = mainVertical.children.length;

function photoFade(offerId, thumbNum) {
const mainVertical = document.getElementById('main-vertical-' + offerId);
const thumbnails = document.getElementById('thumbnail-' + offerId);

Array.from(mainVertical.children).forEach((slide, index) => {
slide.classList.add('d-none');
if (index === thumbNum) {
slide.classList.remove('d-none');
}
});

Array.from(thumbnails.children).forEach((thumb, index) => {
thumb.classList.remove('thumb-opacity');
if (index === thumbNum) {
thumb.classList.add('thumb-opacity');
}
});
}

function autoSlide() {
currentIndex = (currentIndex + 1) % totalSlides;
photoFade(offerId, currentIndex);
}

const thumbnails = document.querySelectorAll(".list-thumbnail li");
thumbnails.forEach(function(thumbnail) {
thumbnail.addEventListener('click', function() {
let thumbNum = parseInt(this.getAttribute('data-thumb-num'));
currentIndex = thumbNum;
photoFade(offerId, thumbNum);
});
});

setInterval(autoSlide, 3000);

photoFade(offerId, currentIndex);
});

デフォルトでは、画像が5つになっていますが、画像を増やすことも可能です。

画像を増やす(減らす)場合は、下記の例を参考にして編集してみてください。

<div class="vertical-slider">
<ul id="main-vertical-1" class="list-slider" data-offer-id="1">
<li id="offer-slide-1-0"><img class="image" src="https://via.placeholder.com/600/FF0000/FFFFFF" alt="赤い画像"></li>
<li class="d-none" id="offer-slide-1-1"><img class="image" src="https://via.placeholder.com/600/00FF00/FFFFFF" alt="緑の画像"></li>
<li class="d-none" id="offer-slide-1-2"><img class="image" src="https://via.placeholder.com/600/0000FF/FFFFFF" alt="青い画像"></li>
<li class="d-none" id="offer-slide-1-3"><img class="image" src="https://via.placeholder.com/600/FFFF00/FFFFFF" alt="黄色の画像"></li>
<li class="d-none" id="offer-slide-1-4"><img class="image" src="https://via.placeholder.com/600/FF00FF/FFFFFF" alt="マゼンタの画像"></li>
<!-- 新しいスライド画像の追加 -->
<li class="d-none" id="offer-slide-1-5"><img class="image" src="https://via.placeholder.com/600/00FFFF/FFFFFF" alt="シアンの画像"></li>
<li class="d-none" id="offer-slide-1-6"><img class="image" src="https://via.placeholder.com/600/FF9900/FFFFFF" alt="オレンジの画像"></li>
</ul>
<ul id="thumbnail-1" class="list-thumbnail">
<li data-offer-id="1" data-thumb-num="0" id="thumb-1-0" class="thumb-opacity"><img class="image" src="https://via.placeholder.com/200/FF0000/FFFFFF" alt="赤い画像"></li>
<li data-offer-id="1" data-thumb-num="1" id="thumb-1-1"><img class="image" src="https://via.placeholder.com/200/00FF00/FFFFFF" alt="緑の画像"></li>
<li data-offer-id="1" data-thumb-num="2" id="thumb-1-2"><img class="image" src="https://via.placeholder.com/200/0000FF/FFFFFF" alt="青い画像"></li>
<li data-offer-id="1" data-thumb-num="3" id="thumb-1-3"><img class="image" src="https://via.placeholder.com/200/FFFF00/FFFFFF" alt="黄色の画像"></li>
<li data-offer-id="1" data-thumb-num="4" id="thumb-1-4"><img class="image" src="https://via.placeholder.com/200/FF00FF/FFFFFF" alt="マゼンタの画像"></li>
<!-- 新しいサムネイル画像の追加 -->
<li data-offer-id="1" data-thumb-num="5" id="thumb-1-5"><img class="image" src="https://via.placeholder.com/200/00FFFF/FFFFFF" alt="シアンの画像"></li>
<li data-offer-id="1" data-thumb-num="6" id="thumb-1-6"><img class="image" src="https://via.placeholder.com/200/FF9900/FFFFFF" alt="オレンジの画像"></li>
</ul>
</div>

注意点としては、id=”XX”data-thumb-num=”X”の部分で、対応する画像を判断しているので、重複しないよう適切に番号を振ってください。

また、setInterval(autoSlide, 3000);で、スライドショーを自動的に進めるための間隔を設定しています。

デフォルトでは3秒に設定しているので、間隔を短くしたければ、2000(2秒)などにしてください。