【Swiper】GSAPと組み合わせてページネーションを改良

今回はスライダープラグインの王道『Swiper』のページネーションを改良したサンプルを公開いたします。

具体的にはページネーションの数字の大きさ、変更時にフェードイン・フェードアウト、スラッシュの大きさ等をGSAP・JavaScriptで実現しました。

1.実装イメージ

実装イメージは以下の通りです。
レスポンシブ対応はしておりませんので『EDIT ON CODEPEN』から全画面表示し1280px以上のデバイスで閲覧することを推奨します。

See the Pen swiper-pagenation-gsap by りょーすけ (@s_ryosuke_1242) on CodePen.

コピペしてすぐに実務で実装できるようにしております。
注意点としては予め、CDNや公式サイトからプラグインをダウンロードしておきましょう。

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;}
	},'>')
})