
2022/09/08 
【WEB制作】画像スライダーを簡単に実装!
Web制作では、よく画像やコンテンツを横並びにし、スライドさせるのを見かけますよね。
そのスライドをさせる方法としては、jQueryを使用することが多いかもしれませんが、それ以外に、いろいろ多彩な機能があるswiperというライブラリがありますので試してみました。
メリット
swiperのメリットとしては、以下の3つかなと思います。
- jQueryに依存しない。(jQueryを使用しなくてもできます。)
- オプション・コールバック関数など、きめ細かくカスタマイズができる。
- 解説に関して日本語の記事が多いので、実装に困ったとき、英語が苦手な方は大変助かる。
サンプル1-基本の基本
必要最低限のサンプルです。マウスのワイプによりスライドします。
コード
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper/swiper-bundle.min.css" />
<!-- スライダーのコンテナ -->
<div class="sample-1">
<div class="swiper-container">
<!-- 必要に応じたwrapper -->
<div class="swiper-wrapper">
<!-- スライド -->
<div class="swiper-slide"><img src="./images/swiper/1.png"></div>
<div class="swiper-slide"><img src="./images/swiper/2.png"></div>
<div class="swiper-slide"><img src="./images/swiper/3.png"></div>
</div>
</div>
</div>
<script src="https://unpkg.com/swiper@8/swiper-bundle.min.js"></script>
<script>
const sample_1 = new Swiper(".sample-1 .swiper-container", {
});
</script>
サンプル2-ページネーションとナビボタン
ページネーションとナビボタンを追加しました。
コード
<style>
.swiper--wrapper {
/* wrapperのサイズを調整 */
width: 100%;
height: 500px;
}
.swiper-wrapper .swiper-slide {
/* スライドのサイズを調整、中身のテキスト配置調整、背景色 */
color: #ffffff;
width: 50%;
height: 100%;
text-align: center;
line-height: 300px;
text-align: center;
}
.swiper-wrapper .swiper-button-prev {
/* スライドのサイズを調整、中身のテキスト配置調整、背景色 */
color: #ffffff;
width: 50%;
height: 100%;
text-align: center;
line-height: 300px;
text-align: center;
}
</style>
<!-- スライダーのコンテナ -->
<div class="sample-2">
<div class="swiper-container">
<!-- 必要に応じたwrapper -->
<div class="swiper-wrapper">
<!-- スライド -->
<div class="swiper-slide"><img src="./images/swiper/1.png"></div>
<div class="swiper-slide"><img src="./images/swiper/2.png"></div>
<div class="swiper-slide"><img src="./images/swiper/3.png"></div>
</div>
<!-- 必要に応じてページネーション -->
<div class="swiper-pagination"></div>
<!-- 必要に応じてナビボタン -->
<div class="swiper-button-prev"></div>
<div class="swiper-button-next"></div>
</div>
</div>
<script src="https://unpkg.com/swiper@8/swiper-bundle.min.js"></script>
<script>
const sample_2 = new Swiper(".sample-2 .swiper-container", {
// ページネーションが必要なら追加
pagination: {
el: ".swiper-pagination"
},
// ナビボタンが必要なら追加
navigation: {
nextEl: ".swiper-button-next",
prevEl: ".swiper-button-prev"
}
});
</script>
サンプル3-自動スライド
画像を自動スライドさせます。
slidesPerViewで表示画像を1枚として、breakpointsのslidesPerViewで543px以上を3枚と設定しています。
コード
<style>
.swiper-wrapper {
/* wrapperのサイズを調整 */
width: 100%;
height: 500px;
}
.swiper-wrapper .swiper-slide {
/* スライドのサイズを調整、中身のテキスト配置調整、背景色 */
color: #ffffff;
width: 50%;
height: 100%;
text-align: center;
line-height: 300px;
text-align: center;
}
.swiper-wrapper .swiper-button-prev {
/* スライドのサイズを調整、中身のテキスト配置調整、背景色 */
color: #ffffff;
width: 50%;
height: 100%;
text-align: center;
line-height: 300px;
text-align: center;
}
</style>
<!-- スライダーのコンテナ -->
<div class="sample-3">
<div class="swiper-container">
<!-- 必要に応じたwrapper -->
<div class="swiper-wrapper">
<!-- スライド -->
<div class="swiper-slide"><img src="./images/swiper/1.png"></div>
<div class="swiper-slide"><img src="./images/swiper/2.png"></div>
<div class="swiper-slide"><img src="./images/swiper/3.png"></div>
</div>
<!-- 必要に応じてページネーション -->
<div class="swiper-pagination"></div>
<!-- 必要に応じてナビボタン -->
<div class="swiper-button-prev-3"></div>
<div class="swiper-button-next-3"></div>
</div>
</div>
<script src="https://unpkg.com/swiper@8/swiper-bundle.min.js"></script>
<script>
const sample_3 = new Swiper(".sample-3 .swiper-container", {
pagination: '.swiper-pagination',
paginationClickable: true,
nextButton: '.swiper-button-next',
prevButton: '.swiper-button-prev',
autoplay: {
delay: 5000,
disableOnInteraction: false,
waitForTransition: false,
},
loop: true,
speed: 1000,
effect: 'slide',
autoplay: true,
slidesPerView: 3,
centeredSlides : true,
slideToClickedSlide: true,
spaceBetween: 10,
breakpoints: {
543: {
slidesPerView: 1
}
}
});
</script>
パラメータ
swiperのパラメータは多く、すべて説明しきれませんが、代表的なものを載せました。
パラメータ | タイプ | 初期値 | 説明 |
---|---|---|---|
loop | boolean | false | true:無限ループさせる。 |
delay | boolean | 3000 | 次のスライドに切り替わるまでの時間(ms)を指定する。 data-swiper-autoplay 属性を利用して、HTML側で個別に値を指定することも可能です。 |
disableOnInteraction | boolean | true | true:ユーザーが操作したときに自動再生を止める。 false にしておくのがお勧め。 |
reverseDirection | boolean | true | 自動再生の進行方向を逆にする。 |
waitForTransition | boolean | true | true:スライド切り替えのアニメーションの間は自動再生を止める。 true だと1枚目のスライドだけ表示時間が短くなるため、表示時間を揃えたいなら false にするのがお勧め。 |
speed | number | 300 | スライド切り替えのアニメーションのスピード(ms)を指定する。 |
effect | ‘slide’ | ‘fade’ | ‘cube’ | ‘coverflow’ | ‘flip’ | ‘creative’ | ‘cards’ | ‘slide’ | エフェクトのタイプを指定します。 詳しくは公式のデモを参照する。 |
slidesPerView | number | 'auto' | 1 | ビューあたりのスライド数 (スライダーのコンテナで同時に表示されるスライド) を指定します。 もし "auto "値でloop: trueと一緒に使うなら、loopedSlidesパラメータに、ループするスライドの数を指定する必要があります(重複)。 slidesPerView: auto' は現在、grid.rows > 1 の場合、multirow モードと互換性がありません。 |