はじめに
今回は実務経験で作成した、3枚の画像が順番に切り替わっていくメインビジュアルについてご紹介します。まずはどのような表示になっているかをご確認ください。
3枚の画像が順番に切り替わっていくメインビジュアルの表示
3枚の画像が順番に切り替わっていくメインビジュアルのソースコード例
PR
<div class="slider">
<div class="slider-wrapper">
<div id="js-slider1" class="slider__list">
<div class="slider__img">
<img src="#" alt="スライダー1">
</div>
<div class="slider__img">
<img src="#" alt="スライダー2">
</div>
<div class="slider__img">
<img src="#" alt="スライダー3">
</div>
</div>
<div id="js-slider2" class="slider__list">
<div class="slider__img">
<img src="#" alt="スライダー1">
</div>
<div class="slider__img">
<img src="#" alt="スライダー2">
</div>
<div class="slider__img">
<img src="#" alt="スライダー3">
</div>
</div>
<div id="js-slider3" class="slider__list">
<div class="slider__img">
<img src="#" alt="スライダー1">
</div>
<div class="slider__img">
<img src="#" alt="スライダー2">
</div>
<div class="slider__img">
<img src="#" alt="スライダー3">
</div>
</div>
</div>
</div>
.slider {
width: 100%;
height: 60vw;
max-height: 450px;
position: relative;
margin: 0 auto;
text-align: center;
overflow: hidden;
}
.slider-wrapper {
position: absolute;
left: 50%;
top: 0;
width: 4000px;
margin-left: -2000px;
font-size: 0;
opacity: 1;
transition: all 1s cubic-bezier(.25, .46, .45, .94);
}
.slider__list {
display: inline-block;
width: 75vw;
margin-left: 5px;
margin-right: 5px;
}
.slider__img {
position: relative;
float: left;
}
.slider__img::before {
content: "";
display: block;
padding-top: 75%;
}
.slider__img img {
width: 100%;
height: 100%;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
margin: auto;
}
function threeFadeSlider(selector, slideDelay, initialSlide) {
// 説明1
jQuery(selector).on('init', function () {
// 説明2
const jQueryself = jQuery(this);
setTimeout(function () {
jQueryself.slick('slickSetOption', 'autoplay', true, true);
}, slideDelay);
});
// 説明3
jQuery(selector).slick({
arrow: false,
autoplay: true,
autoplaySpeed: 3000,
fade: true,
prevArrow: false,
nextArrow: false,
pauseOnFocus: false,
pauseOnHover: false,
pauseOnDotsHover: false,
speed: 1000,
initialSlide: initialSlide,
});
}
// 説明4
threeFadeSlider('#js-slider1', 2000, 2);
threeFadeSlider('#js-slider2', 1000, 0);
threeFadeSlider('#js-slider3', 0, 1);
3枚の画像が順番に切り替わっていくメインビジュアルのソースコードの解説
HTMLの説明
slickを適用させるスライダー(.slick__list)が3つあります。中身は全く同じものが3つです。ただそれぞれ違う動きにしたいので各.slick__listに対してid名をつけています。それぞれ「js-slider1」「js-slider2」「js-slider3」とid名をつけました。
CSSの説明
画像の比率は縦と横3:4で作成しました。.slider__img::beforeのpadding-top: 75%で縦横3:4(3÷4=0.75)になっています。
jQueryの説明
説明1
スライダーが初期化されてから、何秒後に自動再生したいかを記述しています。
説明2
「const jQueryself = jQuery(this);」をsetTimeout関数の外で宣言する必要があります。jQuery(this)は長い文字列ではないので、わざわざ変数宣言する必要はないと考えることもできます。しかし、setTimeout関数の外で宣言をせずに「jQuery(this).Slick( … )」とすると下記エラーが発生します。
説明3
「fade:true」にしないと通常の横スライドになるのでtrueにします。
「initialSlide」では何枚目のスライドからにするのかを指定します。インデックス番号は0から始まるので、2枚目のスライドからにしたい場合は「initialSlide: 1」とします。
説明4
左の見切れスライダー(#js-slider1)の初期スライドは3枚目の緑のスライドで、2秒後に自動再生します。
真ん中のメインスライダー(#js-slider2)の初期スライドは1枚目の赤のスライドで、1秒後に自動再生します。
右の見切れスライダー(#js-slider3)の初期スライドは2枚目の青のスライドで、スライダーが初期化されてから遅れず自動再生します。
SlickのCDN
<script type="text/javascript" src="//cdn.jsdelivr.net/npm/slick-carousel@1.8.1/slick/slick.min.js"></script>
当記事は2023年12月時点のものなので上記のcdnは古くなっている可能性があります。下記の公式もチェックしてください。また、今回のスライダーを作成するにあたって、slickのcssのcdnは使用していないため、必要な場合も下記からお願いします。
https://kenwheeler.github.io/slick/#go-get-it
他のHTML・CSS ・JavaScriptソースコード紹介記事まとめ
実務経験で作成したレイアウトのHTML・CSS ・JavaScriptソースコードを紹介した記事まとめています。