• フリック/ドラッグで横スクロールするカルーセル
  • 下部のスクロールバーでも操作可能
    • 短いストロークで端から端までスライドできるため数が多い場合に向く
    • 簡単なコード修正で削除可能
<div class="slide_01">
  <div class="slide_01--container swiper-container">
    <div class="slide_01--wrapper swiper-wrapper">
      <a class="slide_01--slide swiper-slide" href="{{url}}">
        <img src="{{image}}" alt="">
      </a>

      <a class="slide_01--slide swiper-slide" href="{{url}}">
        <img src="{{image}}" alt="">
      </a>

      <a class="slide_01--slide swiper-slide" href="{{url}}">
        <img src="{{image}}" alt="">
      </a>

      <a class="slide_01--slide swiper-slide" href="{{url}}">
        <img src="{{image}}" alt="">
      </a>

      <a class="slide_01--slide swiper-slide" href="{{url}}">
        <img src="{{image}}" alt="">
      </a>

      <a class="slide_01--slide swiper-slide" href="{{url}}">
        <img src="{{image}}" alt="">
      </a>

      <a class="slide_01--slide swiper-slide" href="{{url}}">
        <img src="{{image}}" alt="">
      </a>

      <a class="slide_01--slide swiper-slide" href="{{url}}">
        <img src="{{image}}" alt="">
      </a>

      <a class="slide_01--slide swiper-slide" href="{{url}}">
        <img src="{{image}}" alt="">
      </a>

      <a class="slide_01--slide swiper-slide" href="{{url}}">
        <img src="{{image}}" alt="">
      </a>

      <a class="slide_01--slide swiper-slide" href="{{url}}">
        <img src="{{image}}" alt="">
      </a>

      <a class="slide_01--slide swiper-slide" href="{{url}}">
        <img src="{{image}}" alt="">
      </a>

      <a class="slide_01--slide swiper-slide" href="{{url}}">
        <img src="{{image}}" alt="">
      </a>

      <a class="slide_01--slide swiper-slide" href="{{url}}">
        <img src="{{image}}" alt="">
      </a>

      <a class="slide_01--slide swiper-slide" href="{{url}}">
        <img src="{{image}}" alt="">
      </a>

      <a class="slide_01--slide swiper-slide" href="{{url}}">
        <img src="{{image}}" alt="">
      </a>

      <a class="slide_01--slide swiper-slide" href="{{url}}">
        <img src="{{image}}" alt="">
      </a>

      <a class="slide_01--slide swiper-slide" href="{{url}}">
        <img src="{{image}}" alt="">
      </a>
    </div>
  </div>

  <div class="slide_01--controller">
    <div class="slide_01--scrollbar">
    </div>
  </div>
</div><!-- /.slide_01 -->
{
  "url": null,
  "image": "/assets/images/dummy_260_260.png"
}
  • Content:
    // =====================================================================================
    //
    // slide_01
    //
    // =====================================================================================
    
    @use 'scss/global' as g;
    
    // -------------------------------------------------------------------------------------
    // 変数
    // -------------------------------------------------------------------------------------
    
    // スライド間のマージン
    $slide_gutter_sp: 8px;
    $slide_gutter_tablet: 16px;
    $slide_gutter_pc: 16px;
    
    // -------------------------------------------------------------------------------------
    // 全体枠
    // -------------------------------------------------------------------------------------
    .slide_01 {
    }
    
    // -------------------------------------------------------------------------------------
    // 全体枠 > スライド全体枠
    // -------------------------------------------------------------------------------------
    .slide_01--container {
    }
    
    // -------------------------------------------------------------------------------------
    // 全体枠 > スライド全体枠 > スライドコンテナ
    // -------------------------------------------------------------------------------------
    .slide_01--wrapper {
    }
    
    // -------------------------------------------------------------------------------------
    // 全体枠 > スライド全体枠 > スライドコンテナ > スライド
    // -------------------------------------------------------------------------------------
    .slide_01--slide {
      max-width: 120px;
    
      @include g.mq(tablet) {
        max-width: 160px;
      }
    
      @include g.mq(pc) {
        max-width: 200px;
      }
    
      img {
        display: block;
        max-width: 100%;
      }
    }
    
    // -------------------------------------------------------------------------------------
    // 全体枠 > スライド操作枠
    // -------------------------------------------------------------------------------------
    .slide_01--controller {
      position: relative;
      width: 53vw;
      margin: 26px auto 0;
    
      @include g.mq(tablet) {
        width: 52vw;
        margin-top: 34px;
      }
    
      @include g.mq(pc) {
        width: 50vw;
        margin-top: 34px;
      }
    
      &::before {
        position: absolute;
        top: 0;
        left: 50%;
        display: block;
        width: 53vw;
        height: 1px;
        content: '';
        background: #ddd;
        transform: translateX(-50%);
    
        @include g.mq(tablet) {
          width: 52vw;
        }
    
        @include g.mq(pc) {
          width: 50vw;
        }
      }
    }
    
    // -------------------------------------------------------------------------------------
    // 全体枠 > スライド操作枠 > スクロールバー
    // -------------------------------------------------------------------------------------
    .slide_01--scrollbar {
      position: relative;
      width: 53vw;
      height: 1px;
      margin: 0 auto;
      background: transparent;
    
      @include g.mq(tablet) {
        width: 52vw;
      }
    
      @include g.mq(pc) {
        width: 50vw;
      }
    }
    
    // -------------------------------------------------------------------------------------
    // 全体枠 > スライド操作枠 > スクロールバー > ツマミ
    // -------------------------------------------------------------------------------------
    .slide_01--scrollbar_drag {
      position: absolute;
      top: -24px;
      height: 48px;
      cursor: pointer;
    
      &::after {
        position: absolute;
        top: 22px;
        left: 0;
        width: 100%;
        height: 5px;
        content: '';
        background: g.$color_primary;
        border-radius: 2.5px;
      }
    }
    
  • URL: /components/raw/slide_01/_slide_01.scss
  • Filesystem Path: src/assets/_parts/components/slide/slide_01/_slide_01.scss
  • Size: 3.4 KB
  • Content:
    // =====================================================================================
    //
    // slide_01
    //  - このファイルを「src/js/components」に移動して使用してください
    //  - 呼び出しの際、引数にRootsの名前を指定してください
    //  - 記述例:
    //      import slide_01 from './components/slide_01';
    //      slide_01('top_kv');
    //
    // =====================================================================================
    
    import $ from 'jquery';
    import Swiper from 'swiper';
    import SwiperCore, { Scrollbar } from 'swiper/core';
    SwiperCore.use([Scrollbar]);
    import 'swiper/swiper-bundle.css';
    
    export default function (rootsName) {
      let swiper;
    
      $(() => {
        swiper = new Swiper('.' + rootsName + '--container', {
          slidesPerView: 'auto',
          freeMode: true,
          spaceBetween: 8,
          breakpoints: {
            768: {
              spaceBetween: 16,
            },
          },
          scrollbar: {
            el: '.' + rootsName + '--scrollbar',
            dragClass: rootsName + '--scrollbar_drag',
            draggable: true,
            snapOnRelease: false,
            hide: false,
          },
        });
      });
    }
    
  • URL: /components/raw/slide_01/slide_01.js
  • Filesystem Path: src/assets/_parts/components/slide/slide_01/slide_01.js
  • Size: 1.1 KB