高機能なスライダーを実装できるJSライブラリ「Swiper」を使用して、以下のような機能のスライドショーを作成していきます。
- 一定速度で横方向にゆっくり流れる
- 1枚ずつではなく連続的に動く
- 最後のスライドまで到達すると、最初のスライドからスタートする(無限ループ)
実際の動作を確認するための実装DEMOや、コピペしてすぐに使用できる実装コード一式も用意していますので、ぜひ参考にして作成してみてください。
無限ループスライドショーの実装DEMO
今回実装するスライダーのDEMOを以下に用意しましたので、実際の挙動を確認してください。
※動作しない場合はページをリロードしてください。
画像が横方向に一定速度で流れるスライダーが確認できたかと思います。
次でコピペ用の実装コード一式を紹介しますので、ぜひ自身の環境で試してみてください。
【コピペ用】無限ループスライドショーの実装コード一式
HTML・CSS・JavaScriptの実装コードを載せてますので、コピペしてお使いください。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>【Swiper】無限ループスライドショーの実装DEMO</title>
<!-- CDN読み込み -->
<link rel="stylesheet" href="https://unpkg.com/swiper@7/swiper-bundle.min.css" />
<!-- CSSファイル読み込み -->
<link rel="stylesheet" href="style.css" />
</head>
<body>
<div class="container">
<div class="swiper infinite-slider">
<div class="swiper-wrapper">
<div class="swiper-slide"><img src="img-1.jpg" alt="画像1" /></div>
<div class="swiper-slide"><img src="img-2.jpg" alt="画像2" /></div>
<div class="swiper-slide"><img src="img-3.jpg" alt="画像3" /></div>
<div class="swiper-slide"><img src="img-4.jpg" alt="画像4" /></div>
</div>
</div>
</div>
<!-- CDN読み込み -->
<script src="https://unpkg.com/swiper@7/swiper-bundle.min.js"></script>
<!-- JSファイル読み込み -->
<script src="main.js"></script>
</body>
</html>
- CSSとJavaScriptファイルへのパスは各自指定してください。
- 画像は配布していませんので、自身で用意してください。画像へのパスも各自指定してください。
/* コンテナー */
.container {
max-width: 900px;
margin: 0 auto;
}
/* スライダーのwrapper */
.infinite-slider .swiper-wrapper {
transition-timing-function: linear;
}
/* スライド */
.infinite-slider .swiper-slide {
height: 320px !important; /* 高さを指定 */
width: auto !important;
}
/* スライド内の画像 */
.infinite-slider .swiper-slide img {
width: auto;
height: 100%;
}
window.addEventListener("DOMContentLoaded", () => {
const infiniteSlider = new Swiper(".infinite-slider", {
loop: true,
loopedSlides: 2,
slidesPerView: "auto",
speed: 8000,
autoplay: {
delay: 0,
disableOnInteraction: false,
},
});
});
実装コードの紹介は以上になります。
これらをコピペすると、DEMOと同じスライダーを実装することができます!
画像は各自で用意していただく必要があるので、その点は注意してください。
次の章では実装コードの解説を行いますので、自身でカスタマイズしたい・コードを理解したいという方はぜひ読み進めてください。
【解説】無限ループスライドショーの実装コード解説
ここからは、先ほど紹介したコードの詳しい解説をしていきます。
上記の順番で進めていきます。
①Swiperを使用するための下準備
まずSwiperを使用するためには、ライブラリをプロジェクト内に読み込む必要がありますね。
今回は一番手軽に読み込むことができるCDNを使用していきます。
CSSはhead
タグ内に、JavaScriptはbody
閉じタグの直前に記述してください。
<head>
<!-- head内でCSSのCDNを読み込む -->
<link rel="stylesheet" href="https://unpkg.com/swiper@7/swiper-bundle.min.css" />
<link rel="stylesheet" href="style.css" />
</head>
<body>
<!-- bodyの閉じタグ直前でJSのCDNを読み込む -->
<script src="https://unpkg.com/swiper@7/swiper-bundle.min.js"></script>
<script src="script.js"></script>
</body>
これでSwiperを使用するための準備が整いました。
②HTMLの解説
HTMLでは、スライダー本体に必要なタグを記述します。
<div class="container">
<div class="swiper infinite-slider">
<div class="swiper-wrapper">
<div class="swiper-slide"><img src="img-1.jpg" alt="画像1" /></div>
<div class="swiper-slide"><img src="img-2.jpg" alt="画像2" /></div>
<div class="swiper-slide"><img src="img-3.jpg" alt="画像3" /></div>
<div class="swiper-slide"><img src="img-4.jpg" alt="画像4" /></div>
</div>
</div>
</div>
スライダーの大枠部分には、infinite-slider
などのわかりやすいクラス名をつけておきます。
中にはSwiperを使う上で必要なswiper-wrapper
と、各スライド要素のswiper-slide
を設置してください。
スライドの中身の画像は各自用意していただき、画像へのURLを記述して完成です。
③CSSの解説
続いてはCSSを見ていきましょう。まずは全体のコードを確認します。
/* コンテナー */
.container {
max-width: 900px;
margin: 0 auto;
}
/* スライダーのwrapper */
.infinite-slider .swiper-wrapper {
transition-timing-function: linear;
}
/* スライド */
.infinite-slider .swiper-slide {
height: 320px !important; /* 高さを指定 */
width: auto !important;
}
/* スライド内の画像 */
.infinite-slider .swiper-slide img {
width: auto;
height: 100%;
}
ここでは、以下の3つの重要なポイントを説明していきます。
- スライドの横スクロール速度を一定にする
- スライドの縦幅・横幅を指定する
- スライド内の画像サイズを指定する
CSS①スライドの横スクロール速度を一定にする
スライダーの横スクロールの動きを一定にするには、swiper-wrapper
クラスに以下のコードを追加します。
/* スライダーのwrapper */
.infinite-slider .swiper-wrapper {
transition-timing-function: linear;
}
transition-timing-function
プロパティでは、アニメーションの実行速度を指定できますね。
このプロパティのデフォルト値はease
で、開始時から徐々に加速し、終わりに近づくと徐々に遅くなるという効果がかかっています。
これをlinear
にすることで、アニメーションの実行速度が一定になります。
CSS②スライドの縦幅・横幅を指定する
続いては、各スライドの大きさを指定します。
/* スライド */
.infinite-slider .swiper-slide {
height: 320px !important; /* 高さを指定 */
width: auto !important;
}
swiper-slide
クラスに、height
とwidth
を指定してください。
ここでは高さを一定にしたいので、height
には好きな値を指定、width
はauto
にします。
swiper-slide
クラスには、Swiperの機能でstyle属性にwidth
の値が指定されているため、それを上書きするために!important
をつける必要があります。
CSS③スライド内の画像サイズを指定する
最後に、スライド内の画像の大きさを指定します。
/* スライド内の画像 */
.infinite-slider .swiper-slide img {
width: auto;
height: 100%;
}
②の段階で、swiper-slide
クラスに対して各スライドの高さを指定しましたね。
なので、中に入る画像にはheight: 100%
、そして画像の比率を変更してしまわないようwidth
にはauto
を指定します。
これでどんなサイズの画像を設置しても、一定の高さを保つ&画像の本来の比率のまま表示することができます。
以上でCSSの解説は終わりです!
④JavaScriptの解説
最後はJavaScriptの設定を見ていきます。
以下が全体のJavaScriptコードです。
window.addEventListener("DOMContentLoaded", () => {
const infiniteSlider = new Swiper(".infinite-slider", {
loop: true,
loopedSlides: 2,
slidesPerView: "auto",
speed: 8000,
autoplay: {
delay: 0,
disableOnInteraction: false,
},
});
});
まずはHTML上に設置したSwiperのタグを選択する必要があるので、以下のコードを記述します。
const infiniteSlider = new Swiper(".infinite-slider", {
// ここにオプションを指定
}
HTMLでinfinite-slider
というクラスを指定しましたね。
new Swiper
の第一引数に↑のクラスを指定します。
続いては、オプションについて解説していきます。
const infiniteSlider = new Swiper(".infinite-slider", {
loop: true,
loopedSlides: 2,
slidesPerView: "auto",
speed: 8000,
autoplay: {
delay: 0,
disableOnInteraction: false,
},
});
オプション名 | 詳細 |
---|---|
loop | true でスライダーがループするようになる。 |
loopedSlides | ループ時に何枚のスライドを複製するかを指定。slidesPerView: 'auto' とloop を併用する場合は、このオプションが必要。 |
slidesPerView | 一度に何枚のスライドを表示するかを指定。'auto' にすると、各スライドが持つ本来の横幅が指定される。 |
speed | スライドが切り替わる速度を指定。 |
autoplay | スライダーが自動再生するようになる。delay …スライドが表示されてから、次のスライドに移動するまでの停止時間を指定。停止させたくないので、0 にしておく。disableOnInteraction …false にすると、ユーザーがスライドをドラッグやスワイプしても、すぐに自動再生が再開する。 |
以上が今回のスライダー実装に使用したオプションです。
さらに詳しい情報を知りたい方は、Swiperの公式ページからご確認ください。
これでJavaScriptの解説は終わりです。
【まとめ】Swiperで横に流れ続ける無限ループスライドショーを実装する方法
Swiperで、一定速度で横に流れ続けるループスライダーを実装する方法を紹介しました。
他にも様々なSwiperカスタマイズ記事を書いていますので、興味があれば読んでみてください。
コメント