2020.10.18

JavaScript

swiper.jsで連動する2つのスライダーを実装

デモページはこちら

swiper.jsで連動する2つのスライダーを実装します。メインのスライダーはナビゲーションボタンかスワイプでスライドさせ、それに連動して背景のスライダーもスライドさせます。

htmlのコードは以下の通りです。注意点として、メインのスライダーのliタグの数と背景のスライダーのliタグの数は合わせる必要があります。数が合わない場合、スライダー同士を連動させる挙動がおかしくなります。

<div class="container">
	<div class="swiper-container c-slider-container-01 js-slider-01">
		<ul class="swiper-wrapper">
			<li class="swiper-slide c-slider-item-01">
				<h4>タイトル01</h4>
				<p>ダミーテキストダミーテキスト</p>
			</li>
			<li class="swiper-slide c-slider-item-01">
				<h4>タイトル02</h4>
				<p>ダミーテキストダミーテキスト</p>
			</li>
			<li class="swiper-slide c-slider-item-01">
				<h4>タイトル03</h4>
				<p>ダミーテキストダミーテキスト</p>
			</li>
		</ul>
		<div class="c-slider-controler">
			<div class="c-slider-controler-container">
				<div class="c-slider-button-prev js-swiper-button-prev">
					<svg class="c-btn-arrow" xmlns="http://www.w3.org/2000/svg" width="131px" height="14px" viewBox="0 0 131 14">
						<path class="c-btn-arrow-parts" fill-rule="evenodd" d="M130.795,25.540 L108.375,0.537 L107.934,2.580 L128.796,26.006 L0.795,26.006 L0.795,28.007 L130.795,28.007 L130.795,25.540 Z"/>
					</svg>
				</div>
			</div>
			<div class="c-slider-controler-container">
				<div class="c-slider-button-next js-swiper-button-next">
					<svg class="c-btn-arrow" xmlns="http://www.w3.org/2000/svg" width="131px" height="14px" viewBox="0 0 131 14">
						<path class="c-btn-arrow-parts" fill-rule="evenodd" d="M130.795,25.540 L108.375,0.537 L107.934,2.580 L128.796,26.006 L0.795,26.006 L0.795,28.007 L130.795,28.007 L130.795,25.540 Z"/>
					</svg>
				</div>
			</div>
		</div>
	</div>
	<div class="swiper-container c-slider-container-02 js-slider-02">
		<ul class="swiper-wrapper">
			<li class="swiper-slide c-slider-item-02">
				<figure class="c-slider-item-photo">
					<span class="c-photo-bg" style="background-image:url(images/swiper01.jpg)"></span>
				</figure>
			</li>
			<li class="swiper-slide c-slider-item-02">
				<figure class="c-slider-item-photo">
					<span class="c-photo-bg" style="background-image:url(images/swiper02.jpg)"></span>
				</figure>
			</li>
			<li class="swiper-slide c-slider-item-02">
				<figure class="c-slider-item-photo">
					<span class="c-photo-bg" style="background-image:url(images/swiper03.jpg)"></span>
				</figure>
			</li>
		</ul>
	</div>
</div>

CSSのコードです。背景のスライダーはposition: absolute;でメインのスライダーに重ねます。htmlではメインのスライダーの後に背景のスライダーを記述しているので、メインのスライダーはz-index: 2;を指定して前面にします。

.container {
	position: relative;
	width: 100%;
	margin: 0;
	padding: 100px 20px;
}
.c-slider-container-01 {
	width: 100%;
	max-width: 400px;
	margin: 0 auto;
	z-index: 2;
}
.c-slider-item-01 {
	padding: 50px;
	background: #fff;
}
@media screen and (max-width: 1199px) {
	.c-slider-item-01 {
		padding: 50px 20px;
	}
}
.c-slider-item-01 h4 {
	margin-bottom: 50px;
	font-family: "游明朝", YuMincho, "Hiragino Mincho ProN W3", "ヒラギノ明朝 ProN W3", "Hiragino Mincho ProN", "HG明朝E", "MS P明朝", "MS 明朝", serif;
	font-size: 2rem;
	font-weight: 600;
	color: #573807;
}
.c-slider-item-01 p {
	color: #9c8c70;
}
.c-slider-controler {
	z-index: 1;
	position: absolute;
	top: 50px;
	right: 50px;
	display: flex;
	justify-content: space-between;
	align-items: flex-end;
}
@media screen and (max-width: 1199px) {
	.c-slider-controler {
		right: 20px;
	}
}
.c-slider-controler-container {
	cursor: pointer;
}
.c-slider-controler-container:not(:nth-child(2n)) {
	margin-right: 10px;
}
.c-slider-button-prev {
	transition: transform 0.5s cubic-bezier(0.175, 0.885, 0.32, 1), opacity 0.5s cubic-bezier(0.175, 0.885, 0.32, 1);
	transform: scale(-1, 1) translateX(0);
}
.c-slider-button-next {
	transition: transform 0.5s cubic-bezier(0.175, 0.885, 0.32, 1), opacity 0.5s cubic-bezier(0.175, 0.885, 0.32, 1);
}
.c-btn-arrow {
	width: 30px;
	margin: 0;
}
.c-btn-arrow-parts {
	fill: #573807;
}
.c-slider-container-02 {
	position: absolute;
	top: 0;
	left: 0;
	width: 100%;
	height: 100%;
	margin: 0;
}
.c-slider-item-photo {
	display: block;
}
.c-slider-item-photo:after {
	position: absolute;
	top: 0;
	right: 0;
	bottom: 0;
	left: 0;
	background: rgba(87, 56, 7, 0.5);
	content: '';
}
.c-photo-bg {
	position: absolute;
	top: 0;
	right: 0;
	bottom: 0;
	left: 0;
	background-position: center;
	background-size: cover;
}

JavaScriptのコードです。メインのスライダーはナビゲーションボタンかスワイプでスライドさせます。背景のスライダーはallowTouchMove: falseを指定してメインのスライダーとの連動以外ではスライドしないようにします。コードの最後の2行で2つのスライダーを連動させています。

var swiper01 = new Swiper('.js-slider-01', {
	loop:true,
	navigation: {
		nextEl: '.js-swiper-button-next',
		prevEl: '.js-swiper-button-prev'
	},
});

var swiper02 = new Swiper('.js-slider-02', {
	loop:true,
	allowTouchMove: false,
});

swiper01.controller.control = swiper02;
swiper02.controller.control = swiper01;

関連記事

2021.01.02

JavaScript

imagesLoadedを利用した画像のローディング

デモページはこちら 画像読み込みの管理ができるJavaScriptライブラリ、imagesLoadedを利用して画像の透過度が変化して見えるローディングを実装し…

2020.09.04

JavaScript

JavaScriptライブラリ Web Font Loader(webfont.js)の使い方

デモページはこちら Webフォントの読み込みにWeb Font Loader(webfont.js)を利用します。Web Font LoaderはGoogleと…

2020.10.27

JavaScript

JavaScriptで文字列を検索(indexOf・search・match・test)

デモページはこちら JavaScriptで文字列を検索するメソッドのまとめです。それぞれ記述の仕方と戻り値に特徴があります。 以下のhtmlの構造でテストします…

2021.01.04

JavaScript

JavaScriptで文字列・配列を切り出し(slice・substr)

デモページはこちら JavaScriptで文字列または配列を切り出すメソッドのまとめです。sliceは文字列と配列、substrは文字列の切り出しができます。 …

2020.10.11

JavaScript

JavaScriptライブラリ swiper.jsの使い方

デモページはこちら JavaScriptライブラリのスライダー、swiper.jsの使い方です。レスポンシブ及びタッチデバイスのスワイプにも対応しています。jQ…

上に戻る