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;





