見出し画像

ShopifyにてSwiperでスライダーセクションを作ろう!

こんにちは!
Shopify構築をメインにしているフリーランスのRyo(@owl__goat)と申します。
今回はDawnテーマを使ってSwiperでスライダーセクションを制作していきます。

実際のサイトはパスワードをコピーし、以下URLをご覧ください。

URL: https://gracialuxe.myshopify.com/
pass: giecre

今回作成するセクションは以下画像のようなスライダーセクションです!
Dawnにはスライドショーセクションがデフォルトでついているのですが、機能性やデザイン性から実案件ではスライダーを別で制作することが多いです。
また、ShopifyではJqueryが非推奨なため、JqueryのプラグインであるSlickよりSwiperを使用することをおすすめします。

Swiperを使用したスライダー


カスタマイズ画面はこんな感じ

1,Swiperを読み込む

CDNを使用してSwiperを読み込ませます。
「theme.liquid」を開き以下を追加します。

  <link
  rel="stylesheet"
  href="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.css"
/>

こちらのコードを<head>タグの中に追加

<script src="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js"></script>

こちらのコードを<body>タグの閉じタグの直前に追加

2,各ファイルを追加

セクションディレクトリに「swiper.liquid」、アセットディレクトリに「swiper.css」、「swiper.js」を追加します。
swiper.jsをtheme.liquidの<body>タグの閉じタグ直前に追加

    <script src="https://cdn.jsdelivr.net/npm/swiper@11/swiper-bundle.min.js"></script>
    <script src="{{ 'swiper.js' | asset_url }}" defer="defer" ></script>
    </body>

3,各ファイルにコードを書いていく

swiper.liquidに以下のコードを追加
※「slideshow.liquid」のコードから一部取り出しています

{{ 'swiper.css' | asset_url | stylesheet_tag }}
{{ 'section-image-banner.css' | asset_url | stylesheet_tag }}
{{ 'component-slider.css' | asset_url | stylesheet_tag }}
{{ 'component-slideshow.css' | asset_url | stylesheet_tag }}


<!-- Sliderを包むコンテナ要素 -->
<div id="bullets" class="swiper">
  <!-- スライド要素を包む要素 -->
  <div class="swiper-wrapper">
    <!-- 各スライド -->
    {% for block in section.blocks %}
            <style>
        .swiper-slide::after {
          opacity: {{ block.settings.opacity | divided_by: 100.0 }};
          background-color:black;
          width:100%;
          height:100%;
        }
      </style>
       {% assign img_url = block.settings.img | img_url: '1024x' %}
      <div class="swiper-slide slide-1 banner__content--{{ block.settings.box_align }}" style="background-image: url('{{ img_url }}');">
        <h2 class="slide-title {{ block.settings.heading_size }}">{{ block.settings.title }}</h2>
      </div>
    {% endfor %} 
  </div>
  <div class="swiper-button-prev"></div>
  <div class="swiper-button-next"></div>
  <div class="swiper-pagination"></div>
</div>



  {% schema %}
    {
      "name": "Swiper  スライダー",
      "tag": "section",
      "class": "section",
      "settings": [

      ],
      "blocks": [
{
        "name": "ブロック",
        "type": "block1",
        "settings": [
            {
                "type": "text",
                "id": "title",
                "label": "確認用テキスト",
                "default":  "block1の確認用テキスト"
            },
               {
        "type": "image_picker",
        "id": "img",
        "label": "画像を選択"
      },
           {
          "type": "select",
          "id": "heading_size",
          "options": [
            {
              "value": "h2",
              "label": "t:sections.all.heading_size.options__1.label"
            },
            {
              "value": "h1",
              "label": "t:sections.all.heading_size.options__2.label"
            },
            {
              "value": "h0",
              "label": "t:sections.all.heading_size.options__3.label"
            }
          ],
          "default": "h1",
          "label": "t:sections.all.heading_size.label"
        },
          {
          "type": "select",
          "id": "box_align",
          "options": [
            {
              "value": "top-left",
              "label": "t:sections.slideshow.blocks.slide.settings.box_align.options__1.label"
            },
            {
              "value": "top-center",
              "label": "t:sections.slideshow.blocks.slide.settings.box_align.options__2.label"
            },
            {
              "value": "top-right",
              "label": "t:sections.slideshow.blocks.slide.settings.box_align.options__3.label"
            },
            {
              "value": "middle-left",
              "label": "t:sections.slideshow.blocks.slide.settings.box_align.options__4.label"
            },
            {
              "value": "middle-center",
              "label": "t:sections.slideshow.blocks.slide.settings.box_align.options__5.label"
            },
            {
              "value": "middle-right",
              "label": "t:sections.slideshow.blocks.slide.settings.box_align.options__6.label"
            },
            {
              "value": "bottom-left",
              "label": "t:sections.slideshow.blocks.slide.settings.box_align.options__7.label"
            },
            {
              "value": "bottom-center",
              "label": "t:sections.slideshow.blocks.slide.settings.box_align.options__8.label"
            },
            {
              "value": "bottom-right",
              "label": "t:sections.slideshow.blocks.slide.settings.box_align.options__9.label"
            }
          ],
          "default": "middle-center",
          "label": "t:sections.slideshow.blocks.slide.settings.box_align.label",
          "info": "t:sections.slideshow.blocks.slide.settings.box_align.info"
        }
        ]
    }
      
      ],
      "presets": [
        {
          "name": "Swiper スライダー"
        }
      ]
    }


    
    {% endschema %}

swiper.cssに以下のコードを追加

.swiper {
  width: 100%;
  height: 570px;
}
.swiper-slide {
  width: 100%;
  height: 100%;
background-size:cover;
  display: flex;
  justify-content: center;
  align-items: center;
  color: #fff;
  font-weight: bold;
}
.swiper-pagination-bullet {
background-color:none;
  border:white;
}
.swiper-pagination-bullet-active {
background-color:white;
}
h2 {
font-size: 40px;
}
@media screen and (max-width: 990px) {
.swiper {
height:420px;
}
}

swiper.jsを以下のコードに追加

const bullets = new Swiper("#bullets", {
    loop: true,
  speed: 1000, 
  autoplay: {
    delay: 3000, 
  },
  navigation: {
    nextEl: ".swiper-button-next",
    prevEl: ".swiper-button-prev"
  },
  pagination: {
    el: ".swiper-pagination", 
    type: "bullets",
    clickable: "clickable"
  }
});
const fraction = new Swiper("#fraction", {
  navigation: {
    nextEl: ".swiper-button-next",
    prevEl: ".swiper-button-prev"
  },
  pagination: {
    el: ".swiper-pagination", 
    type: "fraction"
  }
});
const progressbar = new Swiper("#progressbar", {
  navigation: {
    nextEl: ".swiper-button-next",
    prevEl: ".swiper-button-prev"
  },
  pagination: {
    el: ".swiper-pagination",
    type: "progressbar"
  }
});

完成です!!
細かな修正や機能の追加をし、カスタマイズしていただければと思います。

お疲れ様でした!
もしよければX(Twitter)のフォローもお願いします!


この記事が気に入ったらサポートをしてみませんか?