スワイパー

普通のスワイパー

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

HTML

test01Swiper__itemの中を自由にカスタム。<br>クラス名はtest01を変える(置換使えば楽)

    
<div class="swiper test01Swiper">
    <ul class="swiper-wrapper test01Swiper__list">
        <li class="swiper-slide">
            <div class="test01Swiper__item">

            </div>
        </li>
    </ul>
</div><!-- swiper -->

<div class="paginationFlex paginationFlex-test01">
    <div class="pagiBtn prevBtn"></div>
    <div class="pagiDot"></div>
    <div class="pagiBtn nextBtn"></div>
</div>

    

CSS

テンプレなのでページネーションのみ。

    

.paginationFlex {
  display: flex;
  justify-content: center;
  align-items: center;
  text-align: center;
  margin-top: max(5%, 20px);
}

.pagiDot {
  width: fit-content;

  .swiper-pagination-bullet-active {
    background-color: var(--pink01);
    opacity: 1;
  }
}

.pagiBtn {
  position: relative;
  width: 40px;
  aspect-ratio: 1;
  background-color: var(--pink01);
  border-radius: var(--borderRadiusCircle);
  cursor: pointer;

  &::before,
  &::after {
    position: absolute;
    content: "";
    top: 50%;
    left: 50%;
    background-color: var(--white);
    width: 30%;
    height: 2px;
  }

  &::before {
    transform-origin: bottom right;
    transform: translate(-65%, -33%) rotate(45deg);
  }

  &::after {
    transform-origin: top right;
    transform: translate(-65%, -67%) rotate(-45deg);
  }

}

.prevBtn {
  transform: rotate(180deg);
}
    

JavaScript

    
                  new Swiper('.test01Swiper', {
    slidesPerView: 1,
    loop: true,
    centeredSlides: true,
    spaceBetween: 30,
    autoplay: {
        delay: 30000,
    },
    pagination: {
        el: '.paginationFlex-test01 .pagiDot',
        clickable: true,
    },
    navigation: {
        nextEl: ".paginationFlex-test01 .nextBtn",
        prevEl: ".paginationFlex-test01 .prevBtn",
    },
    breakpoints: {
        481: {
            slidesPerView: 2.6,
        },
    }
});
    

流れ続けるスワイパー

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

HTML

test02Swiper__itemの中を自由にカスタム。

    
<div class="swiper loopSwiper">
    <ul class="swiper-wrapper loopSwiper__list">
        <li class="swiper-slide">
            <div class="loopSwiper__item">
                
            </div>
        </li>
    </ul>
</div>

    

CSS

下記コードでスライドが止まることなく流れ続ける。

    
                  /******************************************
                  流れる続けるスライダー
                  *******************************************/
                  /*スライドの動き等速 */
                  .loopSwiper__list {
                      transition-timing-function: linear;
                  }
    

JavaScript

    
/******************************************
流れる続けるスライダー
*******************************************/
new Swiper('.loopSwiper', {
    slidesPerView: 2,
    allowTouchMove: false,
    spaceBetween: 0,
    loop: true,
    speed: 10000,
    autoplay: {
        delay: 0,
    },
    breakpoints: {
        // 画面幅が481ピクセル以上の場合
        481: {
            slidesPerView: 3,
        },
    }
});
    

流れ続けるスライダー+モーダル

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

HTML

    
                  <!-- スワイパー -->
                  <div class="swiper test05Swiper">
                    <ul class="swiper-wrapper test05Swiper__list">
                      <li class="swiper-slide">
                        <div class="test05Swiper__item" data-modal="1">
                          <span class="test-number">1</span>
                        </div>
                      </li>
                      <li class="swiper-slide">
                        <div class="test05Swiper__item" data-modal="2">
                          <span class="test-number">2</span>
                        </div>
                      </li>
                      <li class="swiper-slide">
                        <div class="test05Swiper__item" data-modal="3">
                          <span class="test-number">3</span>
                        </div>
                      </li>
                      <li class="swiper-slide">
                        <div class="test05Swiper__item" data-modal="4">
                          <span class="test-number">4</span>
                        </div>
                      </li>
                      <li class="swiper-slide">
                        <div class="test05Swiper__item" data-modal="5">
                          <span class="test-number">5</span>
                        </div>
                      </li>
                      <li class="swiper-slide">
                        <div class="test05Swiper__item" data-modal="6">
                          <span class="test-number">6</span>
                        </div>
                      </li>
                    </ul>
                  
                    <div class="paginationFlex paginationFlex-test05">
                      <div class="prevBtn prevBtn-test05"></div>
                      <div class="pageDot pageDot-test05"></div>
                      <div class="nextBtn nextBtn-test05"></div>
                    </div>
                  </div><!-- swiper test05Swiper -->
                  
                  <!-- モーダル -->
                  <div class="modal test05modalWindow">
                    <div class="overlay">
                      <div class="test05modalWindow__cont">
                  
                        <div class="test05modalWindow__item" data-modal="1">
                          <span class="test-number">1</span>
                        </div>
                  
                        <div class="test05modalWindow__item" data-modal="2">
                          <span class="test-number">2</span>
                        </div>
                  
                        <div class="test05modalWindow__item" data-modal="3">
                          <span class="test-number">3</span>
                        </div>
                  
                        <div class="test05modalWindow__item" data-modal="4">
                          <span class="test-number">4</span>
                        </div>
                  
                        <div class="test05modalWindow__item" data-modal="5">
                          <span class="test-number">5</span>
                        </div>
                  
                        <div class="test05modalWindow__item" data-modal="6">
                          <span class="test-number">6</span>
                        </div>
                  
                        <div class="modalBtn-close">
                          <span></span>
                        </div>
                        <div class="modalBtn-prev">
                          <span></span>
                        </div>
                        <div class="modalBtn-next">
                          <span></span>
                        </div>
                  
                      </div>
                    </div><!-- overlay" -->
                  </div><!-- modal test05modalWindow -->
    

CSS

    
                  /*******************************************
                  流れるスライダーとモーダル
                  *******************************************/
                  /* 〜〜〜〜テンプレ用〜〜〜〜〜〜〜〜〜〜〜〜 */
                  .test05Swiper__item {
                      background-color: var(--purple);
                      cursor: pointer;
                  }
                  
                  .test05modalWindow__item {
                      background-color: var(--purple);
                  }
                  
                  
                  /* 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 */
                  
                  .overlay {
                      height: 100vh;
                      background-color: rgba(0, 0, 0, 0.3);
                      backdrop-filter: blur(8px);
                      -webkit-backdrop-filter: blur(8px);
                  
                  }
                  
                  .test05Swiper__list {
                      transition-timing-function: linear;
                  }
                  
                  .paginationFlex-test05 {
                      display: none;
                  }
                  
                  
                  
                  /* jsでクラス付与 */
                  .-noscroll {
                      overflow: hidden;
                  }
                  
                  /* -------スワイパー ------ */
                  .test05modalSwiper {
                      padding: 50px;
                  }
                  
                  .test05modalSwiper .paginationFlex {
                      display: none;
                  }
                  
                  /* -------モーダル------ */
                  .test05modalWindow,
                  .test05modalWindow__item {
                      display: none;
                  }
                  
                  .test05modalWindow.-active,
                  .test05modalWindow__item.-active {
                      display: block;
                  
                  }
                  
                  .test05modalWindow {
                      position: fixed;
                      width: 100%;
                      height: 100vh;
                      height: 100dvh;
                      top: 0;
                      left: 0;
                      z-index: 99;
                      overflow: scroll;
                  }
                  
                  .test05modalWindow__cont {
                      position: relative;
                      max-width: 800px;
                      top: 50%;
                      left: 50%;
                      transform: translate(-50%, -50%);
                  }
                  
                  .test05modalWindow__item {
                      height: 80vh;
                  }
                  
                  
                  /* -------モーダル内ページネーション ------ */
                  .modalBtn-close,
                  .modalBtn-prev,
                  .modalBtn-next {
                      position: absolute;
                  }
                  
                  .modalBtn-close {
                      width: 55px;
                      height: 55px;
                      top: 0;
                      right: 0;
                      background-color: var(--gray);
                      cursor: pointer;
                      transition: var(--transitionBase);
                  
                      &:hover {
                          background-color: var(--black);
                      }
                  
                  }
                  
                  .modalBtn-close span {
                      position: relative;
                      display: block;
                      width: 100%;
                      height: 100%;
                  }
                  
                  .modalBtn-close span::before,
                  .modalBtn-close span::after {
                      position: absolute;
                      content: "";
                      width: 80%;
                      height: 3px;
                      top: 50%;
                      left: 50%;
                      transform: translate(-50%, -50%) rotate(-45deg);
                      background-color: var(--black);
                      transition: var(--transitionBase);
                  }
                  
                  .modalBtn-close span::after {
                      transform: translate(-50%, -50%) rotate(45deg);
                  }
                  
                  .modalBtn-close:hover span::before,
                  .modalBtn-close:hover span::after {
                      background-color: var(--gray);
                      /* ホバー時の背景色 */
                  }
                  
                  .modalBtn-prev,
                  .modalBtn-next {
                      width: 55px;
                      height: 55px;
                      top: 50%;
                      transform: translateY(-50%);
                      cursor: pointer;
                      background-color: var(--gray);
                      border-radius: var(--borderRadius50);
                  }
                  
                  .modalBtn-prev {
                      right: 103%;
                  }
                  
                  .modalBtn-next {
                      left: 103%;
                  }
                  
                  .modalBtn-prev span,
                  .modalBtn-next span {
                      position: relative;
                      display: block;
                      width: 100%;
                      height: 100%;
                  }
                  
                  .modalBtn-prev span::before,
                  .modalBtn-next span::before {
                      position: absolute;
                      content: "";
                      width: 18.5px;
                      /* beforeの/3 */
                      height: calc(27.5px / 2 * tan(60deg));
                      /* pxはbeforeの/2 */
                      clip-path: polygon(0 0, 100% 50%, 0 100%);
                      left:50%;
                      /* pxはbeforeの/2 - 1 */
                      top: 50%;
                      transform: translate(-50%, -50%);
                      background-color: var(--black);
                      z-index: 10;
                  } 
                  
                  .modalBtn-prev span::before {
                      transform: translate(-50%, -50%) scale(-1);
                  }
                  
                  
                  @media screen and (max-width:768px) {
                      .paginationFlex-test05 {
                          display: flex;
                      }
                  
                      .test05Swiper {
                          padding-bottom: 10%;
                      }
                  
                  
                  }
                  
                  
                  
                  @media screen and (max-width:480px) {
                      .test05modalSwiper .paginationFlex {
                          display: flex;
                      }
                  }
    

JavaScript

コードの説明

    
                  /******************************************
                  流れ続けるスライダー(スワイパー)+モーダル
                  *******************************************/
                  // -----------------------------
                  // スワイパー の設定
                  // -----------------------------
                  var test05Swiper = new Swiper('.test05Swiper', {
                    slidesPerView: '1',  // 一度に表示するスライド数
                    allowTouchMove: true,
                    spaceBetween: 30,  // スライド間のスペース
                    loop: true,  // ループするかどうか
                    speed: 500,
                    centeredSlides: true,  // スライドのスピード(ミリ秒)
                    autoplay: {
                      delay: 5000,  // 自動再生の遅延時間(ミリ秒)
                    },
                    pagination: {  //ページネーション(ドット)
                      el: '.pageDot-test05',
                      clickable: true,
                    },
                    navigation: {  //ナビゲーション(矢印)
                      nextEl: ".nextBtn-test05",
                      prevEl: ".prevBtn-test05",
                    },
                    breakpoints: {
                      481: {
                        slidesPerView: 3,
                      },
                      769: {
                        slidesPerView: 4,
                        autoplay: {
                          delay: 0,  // 自動再生の遅延時間(ミリ秒)
                        },
                        speed: 10000,  // スライドのスピード(ミリ秒)
                      }
                    }
                  });
                  
                  // -----------------------------
                  // モーダルの設定
                  // -----------------------------
                  let currentNumber = '';  // 現在表示されているモーダルコンテンツの番号
                  let btnType = '';  // ボタンの種類(次へ、前へ)
                  let maxLength = $('.test05modalWindow__item').length;  // モーダル内のコンテンツの最大数
                  
                  // スワイパースライドをクリックしたときの処理
                  $(document).on('click', '.test05Swiper__item', function () {
                    $('body').addClass('-noscroll');  // スクロールを無効にする
                    let dataModal = $(this).attr('data-modal');  // クリックされたスライドのdata-modal属性を取得
                    $('.test05modalWindow').addClass('-active');
                    $('.overlay').scrollTop(0);  // モーダルの表示位置をトップに戻す
                    $('.test05modalWindow__item').filter('[data-modal = "' + dataModal + '"]').addClass('-active');
                  });
                  
                  // モーダルのクローズボタンをクリックしたときの処理
                  $(document).on('click', '.modalBtn-close', function () {
                    $('body').removeClass('-noscroll');  // スクロールを再度有効にする
                    $('.test05modalWindow').removeClass('-active');
                    $('.test05modalWindow__item').removeClass('-active');
                  });
                  
                  // モーダル外をクリックしたときの処理(モーダルを閉じる)
                  $(document).on('click', function (event) {
                    var target = $(event.target);
                    if (target.hasClass('overlay')) {
                      target.parents('.test05modalWindow').removeClass('-active');
                      $('.test05modalWindow__item').removeClass('-active');
                      $('body').removeClass('-noscroll');
                    }
                  });
                  
                  // 「前へ」ボタンをクリックしたときの処理
                  $(document).on('click', '.modalBtn-prev', function () {
                    currentNumber = $('.test05modalWindow__item.-active').attr('data-modal');
                    btnType = 'prev';
                    operationBtn(btnType, currentNumber);
                  });
                  
                  // 「次へ」ボタンをクリックしたときの処理
                  $(document).on('click', '.modalBtn-next', function () {
                    currentNumber = $('.test05modalWindow__item.-active').attr('data-modal');
                    btnType = 'next';
                    operationBtn(btnType, currentNumber);
                  });
                  
                  // 「前へ」や「次へ」ボタンがクリックされたときの動作を定義する関数
                  function operationBtn(type, num) {
                    num = Number(num);  // 現在の番号を数値型に変換
                  
                    if (type === 'prev') {
                      // 「前へ」ボタンがクリックされた場合の処理
                      if (num !== 1) {
                        num -= 1;  // 番号を1つ減らす
                        $('.test05modalWindow__item').removeClass('-active');
                        $('.test05modalWindow__item').filter('[data-modal = "' + num + '"]').addClass('-active');
                      } else {
                        // 番号が1の場合、最後のコンテンツを表示
                        $('.test05modalWindow__item').removeClass('-active');
                        $('.test05modalWindow__item').filter('[data-modal = "' + maxLength + '"]').addClass('-active');
                      }
                    } else if (type === 'next') {
                      // 「次へ」ボタンがクリックされた場合の処理
                      if (num !== maxLength) {
                        num += 1;  // 番号を1つ増やす
                        $('.test05modalWindow__item').removeClass('-active');
                        $('.test05modalWindow__item').filter('[data-modal = "' + num + '"]').addClass('-active');
                      } else {
                        // 番号が最大数の場合、最初のコンテンツを表示
                        $('.test05modalWindow__item').removeClass('-active');
                        $('.test05modalWindow__item').filter('[data-modal = "' + 1 + '"]').addClass('-active');
                      }
                    }
                  }
    

タブ切り替え

  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

HTML

test03Swiper-tab__item,test03Swiper-cont__itemの中をカスタマイズ

    
<!-- タブボタン -->
<div class="test03Swiper">
    <div class="swiper test03Swiper-tab">
        <ul class="swiper-wrapper test03Swiper-tab__list">
            <li class="swiper-slide">
                <div class="test03Swiper-tab__item">

                </div>
            </li>
        </ul>
    </div><!-- swiper test03Swiper-tab -->

    <!-- タブコンテナ -->
    <div class="swiper test03Swiper-cont">
        <ul class="swiper-wrapper test03Swiper-cont__list">
            <li class="swiper-slide">
                <div class="test03Swiper-cont__item">

                </div>
            </li>
        </ul>
    </div><!-- swiper test03Swiper-cont -->
</div><!-- test03Swiper -->

    

CSS

    
                  /******************************************
                  タブ切り替え
                  *******************************************/
                  .test03Swiper-tab {
                      margin-bottom: 50px;
                  }
                  
                  .test03Swiper-tab__item {
                      cursor: pointer;
                      transition: var(--transitionBase);
                  }
                  
                  .test03Swiper-tab__item:hover,
                  .swiper-slide-thumb-active .test03Swiper-tab__item {
                      background-color: var(--lightpink);
                  }
                  
                  @media screen and (max-width:768px) {
                      .test03Swiper-tab__list {
                          flex-wrap: wrap;
                          justify-content: space-between;
                      }
                  
                      .test03Swiper-tab__list .swiper-slide {
                          width:calc((100% - 15px)/2) !important ;
                  
                          &:nth-child(n + 3) {
                              margin-top: 15px;
                          }
                      }
                  }
    

JavaScript

    
                  // タブ
                  var tabSwiper = new Swiper('.test03Swiper-tab', {
                    slidesPerView: 2,
                    spaceBetween: 0,
                    breakpoints: {
                      // 画面幅が769ピクセル以上の場合
                      769: {
                        slidesPerView: 4,
                        spaceBetween: 15,
                      }
                    }
                  });
                  
                  // タブコンテンツ
                  var contSwiper = new Swiper('.test03Swiper-cont', {
                    effect: 'fade',
                    fadeEffect: {
                      crossFade: true,
                    },
                    slidesPerView: 1,
                    autoHeight: true,
                    loop: true,
                    spaceBetween: 50,
                  
                    // タブと連動
                    thumbs: {
                      swiper: tabSwiper
                    }
                  });
    

タブ切り替え+sp時アコーディオン

  • test04-01
  • test04-02
  • test04-03
  • test04-04
  • test04-05a
  • test04-01

    1

    test04-テキスト01

  • test04-02

    2

    test04-テキスト02

  • test04-03

    3

    test04-テキスト03

  • test04-04

    4

    test04-テキスト04

  • test04-05

    5

    test04-テキスト05

  • test04-01

    aco1

    test04-テキスト01

  • test04-02

    aco2

    test04-テキスト02

  • test04-03

    aco3

    test04-テキスト03

  • test04-04

    aco4

    test04-テキスト04

  • test04-05

    aco5

    test04-テキスト05

HTML

    
                  <div class="test04Swiper">
                  <!-- ↓↓↓↓↓↓↓↓↓↓スワイパー タブ↓↓↓↓↓↓↓↓↓↓ -->
                  <div class="swiper test04Swiper-tab">
                    <ul class="swiper-wrapper test04Swiper-tab__list">
                      <li class="swiper-slide">
                        <div class="test04Swiper-tab__item">
                          <span class="test04Swiper-tab__txt">
                            test04-01
                          </span>
                        </div>
                      </li>
                
                      <li class="swiper-slide">
                        <div class="test04Swiper-tab__item">
                          <span class="test04Swiper-tab__txt">
                            test04-02
                          </span>
                        </div>
                      </li>
                
                      <li class="swiper-slide">
                        <div class="test04Swiper-tab__item">
                          <span class="test04Swiper-tab__txt">
                            test04-03
                          </span>
                        </div>
                      </li>
                
                      <li class="swiper-slide">
                        <div class="test04Swiper-tab__item">
                          <span class="test04Swiper-tab__txt">
                            test04-04
                          </span>
                        </div>
                      </li>
                
                      <li class="swiper-slide">
                        <div class="test04Swiper-tab__item">
                          <span class="test04Swiper-tab__txt">
                            test04-05a
                          </span>
                        </div>
                      </li>
                    </ul>
                  </div>
                  <!-- ↑↑↑↑↑↑↑↑↑↑スワイパー タブ↑↑↑↑↑↑↑↑↑ -->
                  <!-- ↓↓↓↓↓↓↓↓↓↓スワイパー コンテナ↓↓↓↓↓↓↓↓↓↓ -->
                  <div class="test04Cont">
                    <div class="swiper test04Swiper-cont">
                      <ul class="swiper-wrapper test04Swiper-cont__list">
                        <li class="swiper-slide">
                          <div class="test04Swiper-cont__item">
                            <h3 class="test04Swiper-cont__ttl">
                              test04-01
                            </h3>
                            <span class="test-number">1</span>
                            <p class="test04Swiper-cont__txt">
                              test04-テキスト01
                            </p>
                          </div>
                        </li>
                        <li class="swiper-slide">
                          <div class="test04Swiper-cont__item">
                            <h3 class="test04Swiper-cont__ttl">
                              test04-02
                            </h3>
                            <span class="test-number">2</span>
                            <p class="test04Swiper-cont__txt">
                              test04-テキスト02
                            </p>
                          </div>
                        </li>
                        <li class="swiper-slide">
                          <div class="test04Swiper-cont__item">
                            <h3 class="test04Swiper-cont__ttl">
                              test04-03
                            </h3>
                            <span class="test-number">3</span>
                            <p class="test04Swiper-cont__txt">
                              test04-テキスト03
                            </p>
                          </div>
                        </li>
                        <li class="swiper-slide">
                          <div class="test04Swiper-cont__item">
                            <h3 class="test04Swiper-cont__ttl">
                              test04-04
                            </h3>
                            <span class="test-number">4</span>
                            <p class="test04Swiper-cont__txt">
                              test04-テキスト04
                            </p>
                          </div>
                        </li>
                        <li class="swiper-slide">
                          <div class="test04Swiper-cont__item">
                            <h3 class="test04Swiper-cont__ttl">
                              test04-05
                            </h3>
                            <span class="test-number">5</span>
                            <p class="test04Swiper-cont__txt">
                              test04-テキスト05
                            </p>
                          </div>
                        </li>
                      </ul>
                    </div>
                    <!-- ↑↑↑↑↑↑↑↑↑↑スワイパー コンテナ↑↑↑↑↑↑↑↑↑ -->
                    <div class="test04Prev">
                      <span class="test04Prev__btn"></span>
                    </div>
                    <div class="test04Next">
                      <span class="test04Next__btn"></span>
                    </div>
                  </div><!-- test04Cont -->
                </div><!-- test04Swiper -->
                
                
                <!-- ↓↓↓↓↓↓↓↓↓↓アコーディオン↓↓↓↓↓↓↓↓↓↓ -->
                <div class="accordion">
                  <ul class="accordion__list">
                    <li class="accordion__item">
                      <h3 class="accordion__ttl">
                        test04-01
                      </h3>
                      <div class="accordion__detail">
                        <div class="accordion__img">
                          <span class="test-number">aco1</span>
                        </div>
                        <p class="accordion__txt">
                          test04-テキスト01
                        </p>
                      </div>
                    </li>
                    <li class="accordion__item">
                      <h3 class="accordion__ttl">
                        test04-02
                      </h3>
                      <div class="accordion__detail">
                        <div class="accordion__img">
                          <span class="test-number">aco2</span>
                        </div>
                        <p class="accordion__txt">
                          test04-テキスト02
                        </p>
                      </div>
                    </li>
                    <li class="accordion__item">
                      <h3 class="accordion__ttl">
                        test04-03
                      </h3>
                      <div class="accordion__detail">
                        <div class="accordion__img">
                          <span class="test-number">aco3</span>
                        </div>
                        <p class="accordion__txt">
                          test04-テキスト03
                        </p>
                      </div>
                    </li>
                    <li class="accordion__item">
                      <h3 class="accordion__ttl">
                        test04-04
                      </h3>
                      <div class="accordion__detail">
                        <div class="accordion__img">
                          <span class="test-number">aco4</span>
                        </div>
                        <p class="accordion__txt">
                          test04-テキスト04
                        </p>
                      </div>
                    </li>
                    <li class="accordion__item">
                      <h3 class="accordion__ttl">
                        test04-05
                      </h3>
                      <div class="accordion__detail">
                        <div class="accordion__img">
                          <span class="test-number">aco5</span>
                        </div>
                        <p class="accordion__txt">
                          test04-テキスト05
                        </p>
                      </div>
                    </li>
                  </ul>
                </div><!-- accordion -->
                <!-- ↑↑↑↑↑↑↑↑↑↑アコーディオン↑↑↑↑↑↑↑↑↑ -->
    

CSS

    
                  /******************************************
                  タブ切り替え+spの時はアコーディオン
                  *******************************************/
                  
                  /* 〜〜〜〜テンプレ用〜〜〜〜〜〜〜〜〜〜〜〜 */
                  .test04Swiper-cont__item span {
                      width: 100%;
                      height: 200px;
                      background-color: var(--yellow);
                  }
                  
                  .test04Swiper-tab__item {
                      width: 100%;
                      height: 100%;
                      background-color: var(--yellow);
                  }
                  
                  .accordion__img {
                      width: min(100%, 300px);
                      height: max(20vw, 100px);
                      margin: 0 auto;
                      background-color: var(--yellow);
                  }
                  
                  /* 〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜 */
                  
                  
                  
                  
                  /* タブ */
                  .test04Swiper {
                      display: flex;
                      justify-content: space-between;
                  }
                  
                  .test04Swiper-tab {
                      max-width: 420px;
                      width: 100%;
                      margin: 0;
                  }
                  
                  .test04Swiper-tab__list {
                      flex-wrap: wrap;
                      justify-content: space-between;
                  }
                  
                  .test04Swiper-tab__list .swiper-slide {
                      margin-bottom: 20px;
                      width: calc((100% - 20px)/2) !important;
                  }
                  
                  
                  .test04Swiper-tab__list .swiper-slide:last-child {
                      margin-bottom: 0;
                  }
                  
                  .test04Swiper-tab__item {
                      position: relative;
                      cursor: pointer;
                  }
                  
                  .test04Swiper-tab__item {
                      overflow: hidden;
                      border-radius: var(--borderRadius25);
                  }
                  
                  .test04Swiper-tab__item img {
                      display: block;
                  }
                  
                  .test04Swiper-tab__item::after {
                      content: '';
                      position: absolute;
                      top: 0;
                      left: 0;
                      width: 100%;
                      height: 100%;
                      transition: var(--transitionBase);
                  
                      /* 黒のフィルター */
                      /* background-color: rgba(0, 0, 0, 0.3); */
                  }
                  
                  .test04Swiper-tab__item:hover:after,
                  .swiper-slide-thumb-active .test04Swiper-tab__item:after {
                      background-color: rgba(255, 255, 255, 0.3);
                      /* ホバー時に半透明の白を表示 */
                  }
                  
                  .test04Swiper-tab__item:hover .test04Swiper-tab__txt,
                  .swiper-slide-thumb-active .test04Swiper-tab__txt {
                      color: var(--black);
                  }
                  
                  
                  .test04Swiper-tab__txt {
                      position: absolute;
                      left: 50%;
                      bottom: 15px;
                      width: 100%;
                      transform: translateX(-50%);
                      text-align: center;
                      font-size: var(--size21);
                      color: var(--white);
                      line-height: var(--lineHight133);
                      transition: var(--transitionBase);
                      z-index: 1;
                  }
                  
                  /* コンテナ */
                  .test04Cont {
                      padding: 5.5% 5%;
                      position: relative;
                      max-width: 505px;
                      max-height: 637px;
                      border: 2px solid var(--yellow);
                      background-color: var(--white);
                      border-radius: var(--borderRadius25);
                  }
                  
                  .test04Swiper-cont__ttl {
                      margin-bottom: max(13.7%, 20px);
                      text-align: center;
                      font-size: var(--size32);
                      font-weight: var(--weight700);
                  }
                  
                  .test04Swiper-cont__item img {
                      border-radius: var(--borderRadius25);
                  }
                  
                  .test04Swiper-cont__txt {
                      margin-top: 35px;
                      line-height: var(--lineHight155);
                  }
                  
                  /* ページネーション */
                  
                  .test04Prev,
                  .test04Next {
                      position: absolute;
                      top: 50%;
                      z-index: 50;
                      transition: var(--transitionBase);
                  }
                  
                  .test04Prev {
                      left: 0;
                      transform: translate(-50%, -50%);
                  }
                  
                  .test04Prev:hover {
                      transform: translate(-70%, -50%);
                  }
                  
                  .test04Next {
                      right: 0;
                      transform: translate(50%, -50%) scale(-1);
                  }
                  
                  .test04Next:hover {
                      transform: translate(70%, -50%) scale(-1);
                  }
                  
                  .test04Prev__btn,
                  .test04Next__btn {
                      display: inline-block;
                      position: relative;
                      width: 60px;
                      height: 60px;
                      cursor: pointer;
                      border-radius: var(--borderRadius50);
                      background-color: var(--yellow);
                  }
                  
                  .test04Prev__btn::before,
                  .test04Next__btn::before,
                  .test04Prev__btn::after,
                  .test04Next__btn::after {
                      position: absolute;
                      content: "";
                      width: 15px;
                      height: 3px;
                      left: 55%;
                      top: 50%;
                      background-color: var(--white);
                  }
                  
                  .test04Prev__btn::before,
                  .test04Next__btn::before {
                      transform: translate(-50%, -50%) rotate(45deg);
                      transform-origin: top left;
                  }
                  
                  .test04Prev__btn::after,
                  .test04Next__btn::after {
                  
                      transform: translate(-50%, -50%) rotate(-45deg);
                      transform-origin: bottom left;
                  }
                  
                  
                  @media screen and (max-width:1050px) {
                      .test04Cont {
                          margin-left: 20px;
                          width: 49vw;
                  
                      }
                  }
                  
                  
                  @media screen and (max-width:1024px) {
                      .test04Cont {
                          margin-left: 7%;
                      }
                  }
                  
                  @media screen and (max-width:768px) {
                      .test04Swiper {
                          display: none;
                      }
                  
                  }
                  
                  /* ーーーーーーーーーーーーーーー
                  (accordion)
                  ーーーーーーーーーーーーーーー */
                  .accordion {
                      display: none;
                  }
                  
                  @media screen and (max-width:768px) {
                  
                      .accordion {
                          display: block;
                          max-width: 600px;
                          margin: 50px auto 0;
                      }
                  
                      .accordion__item {
                          margin-bottom: 20px;
                          cursor: pointer;
                          padding: 30px 0;
                          border: 2px solid var(--yellow);
                          border-radius: var(--borderRadius10);
                          background-color: var(--lightyellow);
                          transition: var(--transitionBase);
                      }
                  
                  
                  
                  
                      .accordion__item:hover,
                      .accordion__item.open {
                          background-color: var(--white);
                      }
                  
                      .accordion__ttl {
                          font-size: 2.1rem;
                          text-align: center;
                          position: relative;
                          font-weight: var(--weight700);
                      }
                  
                      .accordion__ttl::before,
                      .accordion__ttl::after {
                          position: absolute;
                          content: "";
                          width: 15px;
                          height: 2px;
                          top: 50%;
                          right: 5%;
                          transform: translateY(-50%);
                          background-color: var(--yellow);
                          transition: .6s;
                      }
                  
                      .accordion__ttl::after {
                          transform: translateY(-50%) rotate(90deg);
                      }
                  
                      .open .accordion__ttl::before {
                          transform: translateY(-50%) rotate(180deg);
                      }
                  
                      .open .accordion__ttl::after {
                          transform: translateY(-50%) rotate(360deg);
                      }
                  
                      .accordion__detail {
                          display: none;
                          padding: 0 max(8.4%, 15px);
                      }
                  
                      .accordion__img {
                          max-width: 600px;
                          width: 100%;
                          margin: 30px 0 0 0;
                      }
                  
                      .accordion__txt {
                          font-size: 1.9rem;
                          margin-top: 30px;
                          line-height: var(--lineHight155);
                      }
                  }
                  
                  @media screen and (max-width:480px) {
                      .accordion__item {
                          padding: 20px 0;
                      }
                  
                      .accordion__ttl {
                          font-size: 1.7rem;
                      }
                  
                      .accordion__txt {
                          font-size: 1.5rem;
                      }
                  }
    

JavaScript

コードの説明

    
                  /******************************************
                  タブ切り替え spでアコーディオン(スワイパー)
                  *******************************************/
                  
                  // タブ
                  var tabSwiperAco = new Swiper('.test04Swiper-tab', {
                    allowSlideNext: false,  // 次のスライドへの移動を無効化
                    allowSlidePrev: false,  // 前のスライドへの移動を無効化
                    breakpoints: {
                      950: {
                        // spaceBetween: 35, // 画面幅が950ピクセル以上の場合の設定
                      }
                    }
                  });
                  
                  // タブコンテンツ
                  var contSwiperAco = new Swiper('.test04Swiper-cont', {
                    slidesPerView: 1,
                    loop: true,
                    spaceBetween: 50,
                    navigation: {  // ナビゲーション(矢印)
                      nextEl: ".test04Next__btn",
                      prevEl: ".test04Prev__btn",
                    },
                    thumbs: {
                      swiper: tabSwiperAco  // タブと連動
                    }
                  });
                  
                  // アコーディオン
                  $(document).on('click', '.accordion__item', function () {
                    $(this).toggleClass('open');
                    $(this).find('.accordion__detail').slideToggle();
                  });    
    

spのみスライダースライド

  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

HTML

    
                   <div class="swiper test06Swiper">
                  <ul class="swiper-wrapper test06Swiper__list">
                
                    <li class="swiper-slide">
                      <div class="test06Swiper__item">
                        <span class="test-number">1</span>
                      </div>
                    </li>
                
                    <li class="swiper-slide">
                      <div class="test06Swiper__item">
                        <span class="test-number">2</span>
                      </div>
                    </li>
                
                    <li class="swiper-slide">
                      <div class="test06Swiper__item">
                        <span class="test-number">3</span>
                      </div>
                    </li>
                
                    <li class="swiper-slide test06Swiper-slideSP">
                      <div class="test06Swiper__item">
                        <span class="test-number">1</span>
                      </div>
                    </li>
                
                    <li class="swiper-slide test06Swiper-slideSP">
                      <div class="test06Swiper__item">
                        <span class="test-number">2</span>
                      </div>
                    </li>
                
                    <li class="swiper-slide test06Swiper-slideSP">
                      <div class="test06Swiper__item">
                        <span class="test-number">3</span>
                      </div>
                    </li>
                
                  </ul>
                
                  <div class="paginationFlex">
                    <div class="prevBtn prevBtn-test06"></div>
                    <div class="pageDot pageDot-test06"></div>
                    <div class="nextBtn nextBtn-test06"></div>
                  </div>
                </div><!-- swiper -->
                
                </div><!-- test06Swiper -->
    

CSS

    
                /*******************************************
                  spのみスライダーする
                *******************************************/
                
                .test06Swiper__item {
                background-color: var(--brown);    
                }
                
                .test06Swiper__list {
                    justify-content: space-between;
                
                    & .swiper-slide {
                        width: calc((100% - 30px)/3) ;
                    }
                }
                
                
                
                .test06Swiper-slideSP {
                    display: none;
                }
                
                @media screen and (max-width:768px) {
                    .test06Swiper {
                        padding-bottom: clamp(35px, 5%, 100px);
                    }
                
                    .test06Swiper-slideSP {
                        display: block;
                    }
                }
    

JavaScript

    
                  /******************************************
                  spのみスライダー(スワイパー )
                  *******************************************/
                  // 変数でSwiperインスタンスを管理
                  let test06Swiper = null;
                  
                  // 初期化関数
                  function initSwiper() {
                    // 画面幅が768px未満の場合にSwiperを初期化
                    if (window.innerWidth < 768) {
                      // test06Swiperが未初期化の場合のみ初期化
                      if (!test06Swiper) {
                        test06Swiper = new Swiper('.test06Swiper', {
                          slidesPerView: '2',  // 一度に表示するスライド数
                          loop: true,          // スライドをループさせる
                          centeredSlides: true, // スライドの中心を揃える
                          spaceBetween: 30,    // スライド間のスペース
                  
                          autoplay: {          // 自動再生設定
                            delay: 30000,     // 自動再生の遅延時間(ミリ秒)
                          },
                          pagination: {        // ページネーション(ドット)設定
                            el: '.pageDot-test06', // ドット要素のセレクタ
                            clickable: true,       // ドットをクリック可能にする
                  
                            renderBullet: function (index, className) {
                              // ドットの表示をカスタマイズ
                              if (index < 3) {  // 0, 1, 2のインデックスの場合
                                return '<span class="' + className + '"></span>'; // ドットを表示
                              }
                              return ''; // 4つ目以降のドットは表示しない
                            },
                          },
                  
                          navigation: {        // ナビゲーション(矢印)設定
                            nextEl: ".nextBtn-test06", // 次へボタンのセレクタ
                            prevEl: ".prevBtn-test06", // 前へボタンのセレクタ
                          },
                        });
                      }
                    } else {
                      // 画面幅が768px以上の場合、Swiperを破棄
                      if (test06Swiper) {
                        test06Swiper.destroy(true, true); // Swiperインスタンスを破棄
                        test06Swiper = null; // インスタンスをリセット
                      }
                    }
                  }
                  
                  // ページ読み込み時にSwiperを初期化
                  window.addEventListener('load', function () {
                    initSwiper(); // 初期化関数を呼び出す
                  });
                  
                  // 画面サイズが変更された時にSwiperを再初期化
                  window.addEventListener('resize', function () {
                    initSwiper(); // 初期化関数を呼び出す
                  });