PORTFOLIO & WEB DESIGN MEMORANDOM BLOG   
PORTFOLIO & WEB DESIGN MEMORANDOM BLOG   

Splide Sliderの使い方

タグ :

Splideの導入方法

CDNで簡単導入

  1. <!-- CSS -->
  2. <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@splidejs/splide@4/dist/css/splide.min.css">
  3. <!-- JS -->
  4. <script src="https://cdn.jsdelivr.net/npm/@splidejs/splide@4/dist/js/splide.min.js"></script>

HTML基本構造

  1. <div class="splide">
  2.   <div class="splide__track">
  3.     <ul class="splide__list">
  4.       <li class="splide__slide">Slide 1</li>
  5.       <li class="splide__slide">Slide 2</li>
  6.       <li class="splide__slide">Slide 3</li>
  7.     </ul>
  8.   </div>
  9. </div>

初期化(JS)

  1. <script>
  2. document.addEventListener('DOMContentLoaded', function () {
  3.   new Splide('.splide').mount();
  4. });
  5. </script>

基本的な設定(オプション)

  1. new Splide('.splide', {
  2.   type: 'loop', // ループ
  3.   perPage: 3, // 表示枚数
  4.   gap: '1rem', // 間隔
  5.   autoplay: true, // 自動再生
  6.   interval: 3000, // 再生間隔
  7.   pauseOnHover: true, // ホバーで停止
  8. }).mount();

よく使うオプション一覧

type —- slide / loop / fade

perPage — 表示枚数

perMove — 一度に動く枚数

gap — スライド間の余白

autoplay — 自動再生

speed — アニメーション速度

pagination — ドット表示

arrows — 矢印表示

rewind — 最後のスライドまで行ったら、最初に戻る

レスポンシブ対応

  1. new Splide('.splide', {
  2.   perPage: 3,
  3.   breakpoints: {
  4.     768: {
  5.       perPage: 2,
  6.     },
  7.     480: {
  8.       perPage: 1,
  9.     }
  10.   }
  11. }).mount();

カスタマイズ(CSS)

矢印デザイン変更

  1. .splide__arrow {
  2.   background: black;
  3.   color: white;
  4. }

スライドデザイン

  1. .splide__slide {
  2.   background: #eee;
  3.   padding: 40px;
  4.   text-align: center;
  5. }

ドット(pagination)

  1. .splide__pagination__page {
  2.   background: gray;
  3. }
  4. .splide__pagination__page.is-active {
  5.   background: black;
  6. }

応用テクニック

フェードスライダー

  1. new Splide('.splide', {
  2.   type: 'fade',
  3. }).mount();

センター表示(カルーセル)

  1. new Splide('.splide', {
  2.   type: 'loop',
  3.   focus: 'center',
  4.   perPage: 3,
  5. }).mount();

サムネイル付きスライダー

  1. const main = new Splide('#main');
  2. const thumbs = new Splide('#thumbs', {
  3.   fixedWidth: 100,
  4.   gap: 10,
  5.   isNavigation: true,
  6. });
  7. main.sync(thumbs);
  8. main.mount();
  9. thumbs.mount();

複数スライダー

  1. document.querySelectorAll('.splide').forEach(el => {
  2.   new Splide(el).mount();
  3. });

イベント

  1. const splide = new Splide('.splide');
  2. splide.on('moved', function (newIndex) {
  3.   console.log('現在のスライド:', newIndex);
  4. });
  5. splide.mount();

WordPressで使う場合

方法①:直接読み込み

  1. wp_enqueue_script('splide-js', 'https://cdn...', [], null, true);
  2. wp_enqueue_style('splide-css', 'https://cdn...');

方法②:テーマ内に組み込み

• assets/js/splide.js
• assets/css/splide.css

よくあるエラー

動かない — JS読み込み忘れ
レイアウト崩れ — HTML構造ミス
スライドずれる — CSS競合
自動再生しない — autoplay未設定

Splide × GSAP(GSAP連携)

GSAPを読み込み

  1. <script src="https://cdn.jsdelivr.net/npm/gsap@3/dist/gsap.min.js"></script>

スライド切り替え時にアニメーション

  1. const splide = new Splide('.splide', {
  2.   type: 'loop',
  3. });
  4. splide.on('mounted move', function () {
  5.   gsap.from('.splide__slide.is-active', {
  6.     opacity: 0,
  7.     y: 50,
  8.     duration: 0.8,
  9.     ease: 'power3.out'
  10.   });
  11. });
  12. splide.mount();

スライドが切り替わるたびにフェード+下から出現

スライド内の要素を個別アニメーション

HTML

  1. <li class="splide__slide">
  2.   <h2 class="title">Title</h2>
  3.   <p class="text">Description</p>
  4. </li>

GSAP

  1. splide.on('active', function (slide) {
  2.   const el = slide.slide;
  3.   gsap.from(el.querySelector('.title'), {
  4.     opacity: 0,
  5.     y: 30,
  6.     duration: 0.6,
  7.   });
  8.   gsap.from(el.querySelector('.text'), {
  9.     opacity: 0,
  10.     y: 30,
  11.     duration: 0.6,
  12.     delay: 0.2,
  13.   });
  14. });

テキストを順番にふわっと出す

スライド切替「前」にアニメーション

  1. splide.on('move', (newIndex, oldIndex, destIndex) => {
  2.   const slides = splide.Components.Elements.slides;
  3.   const currentSlide = slides[oldIndex];
  4.   gsap.to(currentSlide, {
  5.     opacity: 0,
  6.     scale: 0.9,
  7.     duration: 0.5,
  8.   });
  9. });

タイムラインでリッチ演出

  1. splide.on('active', (slide) => {
  2.   const el = slide.slide;
  3.   const tl = gsap.timeline();
  4.   tl.from(el.querySelector('.title'), {
  5.     opacity: 0,
  6.     y: 50,
  7.     duration: 0.6
  8.   })
  9.   .from(el.querySelector('.text'), {
  10.     opacity: 0,
  11.     y: 50,
  12.     duration: 0.6
  13.   }, "-=0.3");
  14. });

パララックス風アニメーション

  1. splide.on('active', (slide) => {
  2.   const el = slide.slide;
  3.   const tl = gsap.timeline();
  4. splide.on('move', () => {
  5.   gsap.to('.splide__slide img', {
  6.     x: -50,
  7.     duration: 1,
  8.     ease: 'power2.out'
  9.   });
  10. });

前のアニメーションをリセット

  1. splide.on('inactive', (slide) => {
  2.   gsap.set(slide.slide.querySelectorAll('*'), {
  3.     clearProps: 'all'
  4.   });
  5. });

アニメーション初期化

サンプル

See the Pen
Untitled
by ryotom (@ryotam-smoke)
on CodePen.

MILMONA   MILMONA   MILMONA   MILMONA   MILMONA   
MILMONA   MILMONA   MILMONA   MILMONA   MILMONA