今回はスライダープラグインの王道『Swiper』のページネーションを改良したサンプルを公開いたします。
具体的にはページネーションの数字の大きさ、変更時にフェードイン・フェードアウト、スラッシュの大きさ等をGSAP・JavaScriptで実現しました。
目次 非表示
1.実装イメージ
実装イメージは以下の通りです。
レスポンシブ対応はしておりませんので『EDIT ON CODEPEN』から全画面表示し1280px以上のデバイスで閲覧することを推奨します。
See the Pen swiper-pagenation-gsap by りょーすけ (@s_ryosuke_1242) on CodePen.
コピペしてすぐに実務で実装できるようにしております。
注意点としては予め、CDNや公式サイトからプラグインをダウンロードしておきましょう。
必要なファイルは『swiper-bundle.min.css』『swiper-bundle.min.js』の2つです
2.HTML
HTMLはコチラの通りになっています。比較的シンプルですね
<section class="mv__wrapper">
<div class="swiper-container mv-swiper-container">
<ul class="swiper-wrapper">
<li class="swiper-slide"><img src="https://ryo-sukeblog.net/wp-content/uploads/2022/05/mv01.jpg" alt=""></li>
<li class="swiper-slide"><img src="https://ryo-sukeblog.net/wp-content/uploads/2022/05/mv02.jpg" alt=""></li>
<li class="swiper-slide"><img src="https://ryo-sukeblog.net/wp-content/uploads/2022/05/mv03.jpg" alt=""></li>
</ul>
</div>
<div class="mv-swiper-pagination"><span id="current-page">1</span><img src="https://ryo-sukeblog.net/wp-content/uploads/2022/05/slash.png" class="slash" alt=""><span id="total-pages"></span></div>
</section>
3.CSS
次にCSSです。
*{
margin: 0;
padding: 0;
box-sizing: border-box;
}
html{
width: 100%;
}
body{
width: 100%;
}
main{
width: 100%;
}
li{
list-style: none;
}
header{
width: 100%;
height: 164px;
}
header nav ul {
display: flex;
}
.spacer{
width: 100%;
height: 50vh;
}
.mv__wrapper{
width: 100%;
padding: 20px 0;
pointer-events: none;
}
.mv-swiper-container{
width: 1252px;
height: 465px;
margin: 0 auto;
overflow: hidden;
position: relative;
}
.mv-swiper-container .swiper-wrapper img{
width: 100%;
height: 100%;
object-fit: cover;
}
.mv-swiper-pagination{
width: fit-content;
margin: 25.5px auto 0;
display: flex;
align-items: center;
}
.slash{
margin: 0 20px;
}
4.JavaScript
最後にJavaScriptです
var totalPages = document.querySelectorAll('.mv-swiper-container .swiper-wrapper .swiper-slide')
var totalPagesElem = document.getElementById('total-pages');
totalPagesElem.innerHTML = totalPages.length;
var currentPageElem = document.getElementById('current-page');
var mvSwiper = new Swiper('.mv-swiper-container', {
speed: 2000,
slidesPerView: 'auto',
loop: true,
effect:'fade',
allowTouchMove: false,
autoplay: {
delay: 2000,
disableOnInteraction: false,
},
});
mvSwiper.on('slideChange',function(){
var tl = gsap.timeline();
tl.to('#current-page',{
autoAlpha:0,
duration:.5
})
.to('#current-page',{
autoAlpha:1,
duration:.5,
add:()=>{currentPageElem.innerHTML = mvSwiper.realIndex + 1;}
},'>')
})