Swiperでレスポンシブ対応のスライダーを作成

1. Swiperとは

Swiper(Swiper.js)とは、Webサイトで画像やコンテンツをスライドさせて表示する「スライダーカルーセル)」を簡単に作れる、人気の高いJavaScriptライブラリです。

 出典 : Swiper

jQuery不要で単体で動き、スマホの指でのスワイプ操作やレスポンシブ表示にも強く、多くのWeb制作で使われています。

今回は、Swiperレスポンシブ対応のスライダーを作成する方法を紹介します。

2. Swiperの特徴

jQueryに依存しない

SwiperjQuery非依存なので、脱jQueryを求める方や、要件としてjQueryが使えないプロジェクトの場合はまず候補に挙がると思います。

オプション・コールバック関数が豊富でカスタマイズ性が高い

オプションコールバック関数が非常に多く用意されているのが特徴で、柔軟なカスタマイズが可能となっています。

レスポンシブ対応

画面の大きさに合わせて、表示する数をすぐ変えられます。また、指でのスワイプタッチの動きがとても滑らかです。

3. Swiperの基本的な使い方

Swiper Demosページで紹介されている、デモからスライダーを制作する方法を紹介します。

 出典 : Swiper Demos

3-1. デモ

まず、Swiper Demosページにアクセスします。Defaultを実装してみます。DefaultPreviewをクリックして、全画面デモを確認します。Previewを閉じます。コードを表示するため、JS Coreボタンをクリックします。コードデモが表示されます。HTMLCSSJavaScriptそれぞれのファイルに、必要なコードコピペします。

DefaultPreviewをクリック

全画面デモを確認

JS Coreボタンをクリックしてコードを表示

HTMLCSSJavaScriptそれぞれのファイルに、必要なコードコピペ

3-2. HTML

headに共通のswiper-bundle.min.cssswiper-bundle.min.jsを読み込みます。CSSJavaScriptは、その後に読み込みます。

スライダーを表示したい場所にswiperHTMLを挿入します。親要素(今回はsection)にスライダー全体サイズを指定します。実際には、swiper-slide内に画像を挿入します。

<!-- Swiper CSS -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swiper@14.0.1/swiper-bundle.min.css"/>	
<!-- CSS --> 
<link href="css/style.css" rel="stylesheet">
<!-- Swiper JS -->
<script src="https://cdn.jsdelivr.net/npm/swiper@14.0.1/swiper-bundle.min.js"></script>
<!-- JS -->
<script src="js/script.js" defer></script>
<section class="swiper-container">
	<!-- Swiper -->
	<div class="swiper mySwiper">
		<div class="swiper-wrapper">
			<div class="swiper-slide">Slide1</div>
			<div class="swiper-slide">Slide2</div>
			<div class="swiper-slide">Slide3</div>
			<div class="swiper-slide">Slide4</div>
			<div class="swiper-slide">Slide5</div>
		</div>
	</div>
</section>

3-3. CSS

コードのswiper以降のCSSを書き込みます。

/* 親要素 */
.swiper-container{
	width: 100vw;
	height: 100vh;
}

/* swiper */
.swiper {
	width: 100%;
	height: 100%;
}
.swiper-slide {
	text-align: center;
	font-size: 18px;
	background: #444;
	display: flex;
	justify-content: center;
	align-items: center;
}
.swiper-slide img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

3-4. JavaScript

Swiper JSJavaScriptファイルに書き込みます。Defaultは中身が空欄ですが、オプション設定を書き込むことができます。

var swiper = new Swiper('.mySwiper', {
  // オプション
});

4. オプション設定

JavaScriptで、ループエフェクトなどの設定を行います。よく使うオプションの一部を紹介します。

var swiper = new Swiper('.mySwiper', {
  // オプション
  loop: true, // ループ有効化
  lazy: true, // 遅延読み込み有効化
  effect: 'fade', // フェードエフェクト
  autoplay: {
    delay: 3000, // 自動再生の間隔
  },
});
オプション説明
loopスライダーをループさせるかtrue , false
lazy遅延読み込みをするかtrue , false
effectエフェクトの種類fade , cube , cards 他
autoplay自動再生
delay自動再生の間隔数字(ミリ秒)

5. おすすめデモ

デモの中からおすすめのスライダーを紹介します。前項で紹介した、共通のswiper-bundle.min.cssswiper-bundle.min.jsを読み込み、HTMLCSSJavaScriptをそれぞれのファイルに入力します。

5-1. Scrollbar

 出典 : Scrollbar

インジケータースライドバーになっています。シンプルで使いやすいスライダーです。

<!-- Swiper -->
<div class="swiper mySwiper">
	<div class="swiper-wrapper">
		<div class="swiper-slide">Slide1</div>
		<div class="swiper-slide">Slide2</div>
		<div class="swiper-slide">Slide3</div>
		<div class="swiper-slide">Slide4</div>
		<div class="swiper-slide">Slide5</div>
		<div class="swiper-slide">Slide6</div>
		<div class="swiper-slide">Slide7</div>
		<div class="swiper-slide">Slide8</div>
		<div class="swiper-slide">Slide9</div>
	</div>
	<div class="swiper-scrollbar"></div>
</div>
/* swiper */
.swiper {
	width: 100%;
	height: 100%;
}
.swiper-slide {
	text-align: center;
	font-size: 18px;
	background: #444;
	display: flex;
	justify-content: center;
	align-items: center;
}
.swiper-slide img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}
var swiper = new Swiper('.mySwiper', {
	scrollbar: {
    	el: '.swiper-scrollbar',
    	hide: true,
	},
});

5-2. Grid

 出典 : Grid

スライド2段になっているギャラリー風のスライダーです。

<!-- Swiper -->
<div class="swiper mySwiper">
	<div class="swiper-wrapper">
		<div class="swiper-slide">Slide1</div>
		<div class="swiper-slide">Slide2</div>
		<div class="swiper-slide">Slide3</div>
		<div class="swiper-slide">Slide4</div>
		<div class="swiper-slide">Slide5</div>
		<div class="swiper-slide">Slide6</div>
		<div class="swiper-slide">Slide7</div>
		<div class="swiper-slide">Slide8</div>
		<div class="swiper-slide">Slide9</div>
	</div>
	<div class="swiper-pagination"></div>
</div>
/* swiper */
.swiper {
	width: 100%;
	height: 100%;
}
.swiper-slide {
	text-align: center;
	font-size: 18px;
	background: #333;
	height: calc((100% - 30px) / 2) !important;

	/* Center slide text vertically */
	display: flex;
	justify-content: center;
	align-items: center;
}
var swiper = new Swiper('.mySwiper', {
	slidesPerView: 3,
	grid: {
		rows: 2,
	},
	spaceBetween: 30,
	pagination: {
		el: '.swiper-pagination',
		clickable: true,
	},
});

5-3. Effect cards

 出典 : Effect cards

カードのようなスライダーです。UIがとてもユニークでかわいいスライダーです。

<!-- Swiper -->
<div class="swiper mySwiper">
	<div class="swiper-wrapper">
		<div class="swiper-slide">Slide1</div>
		<div class="swiper-slide">Slide2</div>
		<div class="swiper-slide">Slide3</div>
		<div class="swiper-slide">Slide4</div>
		<div class="swiper-slide">Slide5</div>
		<div class="swiper-slide">Slide6</div>
		<div class="swiper-slide">Slide7</div>
		<div class="swiper-slide">Slide8</div>
		<div class="swiper-slide">Slide9</div>
	</div>
</div>
/* swiper */
.swiper {
	width: 240px;
    height: 320px;
}
.swiper-slide {
	display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 18px;
    font-size: 22px;
    font-weight: bold;
    color: #fff;
}
.swiper-slide:nth-child(1n) {
    background-color: rgb(206, 17, 17);
}
.swiper-slide:nth-child(2n) {
    background-color: rgb(0, 140, 255);
}
.swiper-slide:nth-child(3n) {
    background-color: rgb(10, 184, 111);
}
.swiper-slide:nth-child(4n) {
    background-color: rgb(211, 122, 7);
}
.swiper-slide:nth-child(5n) {
    background-color: rgb(118, 163, 12);
}
.swiper-slide:nth-child(6n) {
    background-color: rgb(180, 10, 47);
}
.swiper-slide:nth-child(7n) {
    background-color: rgb(35, 99, 19);
}
.swiper-slide:nth-child(8n) {
    background-color: rgb(0, 68, 255);
}
.swiper-slide:nth-child(9n) {
    background-color: rgb(218, 12, 218);
}
.swiper-slide:nth-child(10n) {
    background-color: rgb(54, 94, 77);
}
var swiper = new Swiper('.mySwiper', {
	effect: 'cards',
	grabCursor: true,
});

5-4. Thumbs gallery loop

 出典 : Thumbs gallery loop

サムネイル付きのループスライダーです。トップページメインでよく使用されるようなスライダーです。

<!-- Swiper -->
<div style="--swiper-navigation-color: #fff; --swiper-pagination-color: #fff" class="swiper mySwiper2">
	<div class="swiper-wrapper">
		<div class="swiper-slide">
			<img src="https://swiperjs.com/demos/images/abstract-1.jpg" />
		</div>
        <div class="swiper-slide">
			<img src="https://swiperjs.com/demos/images/abstract-2.jpg" />
        </div>
        <div class="swiper-slide">
			<img src="https://swiperjs.com/demos/images/abstract-3.jpg" />
        </div>
        <div class="swiper-slide">
			<img src="https://swiperjs.com/demos/images/abstract-4.jpg" />
        </div>
        <div class="swiper-slide">
			<img src="https://swiperjs.com/demos/images/abstract-5.jpg" />
        </div>
        <div class="swiper-slide">
			<img src="https://swiperjs.com/demos/images/abstract-6.jpg" />
        </div>
        <div class="swiper-slide">
			<img src="https://swiperjs.com/demos/images/abstract-7.jpg" />
        </div>
        <div class="swiper-slide">
			<img src="https://swiperjs.com/demos/images/abstract-8.jpg" />
        </div>
        <div class="swiper-slide">
			<img src="https://swiperjs.com/demos/images/abstract-9.jpg" />
        </div>
        <div class="swiper-slide">
			<img src="https://swiperjs.com/demos/images/abstract-10.jpg" />
        </div>
	</div>
	<div class="swiper-button-next"></div>
	<div class="swiper-button-prev"></div>
</div>
<div thumbsSlider="" class="swiper mySwiper">
	<div class="swiper-wrapper">
		<div class="swiper-slide">
			<img src="https://swiperjs.com/demos/images/abstract-1.jpg" />
        </div>
        <div class="swiper-slide">
			<img src="https://swiperjs.com/demos/images/abstract-2.jpg" />
        </div>
        <div class="swiper-slide">
			<img src="https://swiperjs.com/demos/images/abstract-3.jpg" />
        </div>
        <div class="swiper-slide">
			<img src="https://swiperjs.com/demos/images/abstract-4.jpg" />
        </div>
        <div class="swiper-slide">
			<img src="https://swiperjs.com/demos/images/abstract-5.jpg" />
        </div>
        <div class="swiper-slide">
			<img src="https://swiperjs.com/demos/images/abstract-6.jpg" />
        </div>
        <div class="swiper-slide">
			<img src="https://swiperjs.com/demos/images/abstract-7.jpg" />
        </div>
        <div class="swiper-slide">
			<img src="https://swiperjs.com/demos/images/abstract-8.jpg" />
        </div>
        <div class="swiper-slide">
			<img src="https://swiperjs.com/demos/images/abstract-9.jpg" />
        </div>
        <div class="swiper-slide">
			<img src="https://swiperjs.com/demos/images/abstract-10.jpg" />
		</div>
	</div>
</div>
/* swiper */
.swiper {
	width: 100%;
	height: 100%;
}
.swiper-slide {
	text-align: center;
	font-size: 18px;
	background: #444;
	display: flex;
	justify-content: center;
	align-items: center;
}
.swiper-slide img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}
.swiper {
	width: 100%;
	height: 300px;
	margin-left: auto;
	margin-right: auto;
}
.swiper-slide {
	background-size: cover;
	background-position: center;
}
.mySwiper2 {
	height: 80%;
	width: 100%;
}
.mySwiper {
	height: 20%;
	box-sizing: border-box;
	padding: 10px 0;
}
.mySwiper .swiper-slide {
	width: 25%;
	height: 100%;
	opacity: 0.4;
}
.mySwiper .swiper-slide-thumb-active {
	opacity: 1;
}
.swiper-slide img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}
var swiper = new Swiper('.mySwiper', {
	loop: true,
	spaceBetween: 10,
	slidesPerView: 4,
	freeMode: true,
	watchSlidesProgress: true,
});
var swiper2 = new Swiper('.mySwiper2', {
	loop: true,
	spaceBetween: 10,
	navigation: {
		nextEl: '.swiper-button-next',
		prevEl: '.swiper-button-prev',
	},
	thumbs: {
		swiper: swiper,
	},
});

6. まとめ

以上で今回のBLOGは終了です。実装も簡単で、コードシンプルなので、使いやすいJavaScriptライブラリだと思います。オプションも豊富なので、ループに変更したり、自動再生速度を変更したりするのが簡単にできます。今回紹介したスライダーの他にも多くのスライダーがあるので、デザインに合わせて選ぶことができます。