見出し画像

【 WEBデザイン 】 縦スクロールで、横に動く  FirE♯498

縦スクロールをしていき、一定の位置にくると、横スクロールになる動きを実装します。

ユーザーは縦にスクロールする動きを続けると、画面が横スクロールするので、スクロールが楽しくなり、面白い機能だと思います。

今回は、「Works」という制作実績のリストが横スクロールで表示されます。




■ CDN

  <!-- ScrollMagic  TweenMax -->
  <script src="https://cdnjs.cloudflare.com/ajax/libs/ScrollMagic/2.0.5/plugins/debug.addIndicators.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/ScrollMagic/2.0.5/ScrollMagic.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/ScrollMagic/2.0.2/plugins/animation.gsap.js"></script>

  
  <!-- G SAP -->
  <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.6.1/gsap.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.6.1/ScrollTrigger.min.js"></script>

GSAPなどの読み込みです。



■ HTML

<div class="space">
  縦スクール
  ↓
</div>



<!--制作実績-->
<section class="works side-scroll">

  <!--タイトル-->
  <div class="works-title">
    <h1 class="title">
      Works
    </h1>
  </div>
  <!--/タイトル-->


  <div class="works-container">

    <div class="works-container-inner">

      <div class="side-scroll-list-wrapper">
        <ul class="side-scroll-list">

          <li class="side-scroll-item">
            <!--実績1-->
            <div class="works-container-inner-item">
              <div class="works-img">
                  <img src="http://sap-sutdio.upper.jp/test-images/sap-studio.webp">
              </div>

              <div class="works-header">
                <p>S.A.P.Studio</p>
                <h2>S.A.P.Studio</h2>
              </div>


              <div class="works-body">
                <dl>
                  <dt>WORK      </dt>
                  <dd>coding</dd>
                  <dt>PERIOD   </dt>
                  <dd>2weeks</dd>
                </dl>

              </div>

            </div>
            <!--/実績1-->
          </li>

          <li class="side-scroll-item">
            <!--実績2-->
            <div class="works-container-inner-item">
              <div class="works-img">
                  <img src="http://sap-sutdio.upper.jp/test-images/sap-studio.webp">
              </div>

              <div class="works-header">
                <p>S.A.P.Studio</p>
                <h2>S.A.P.Studio</h2>
              </div>


              <div class="works-body">
                <dl>
                  <dt>WORK      </dt>
                  <dd>coding</dd>
                  <dt>PERIOD   </dt>
                  <dd>2weeks</dd>
                </dl>

              </div>

            </div>
            <!--/実績2-->
          </li>


          <li class="side-scroll-item">
            <!--実績3-->
            <div class="works-container-inner-item">
              <div class="works-img">
                  <img src="http://sap-sutdio.upper.jp/test-images/sap-studio.webp">
              </div>

              <div class="works-header">
                <p>S.A.P.Studio</p>
                <h2>S.A.P.Studio</h2>
              </div>


              <div class="works-body">
                <dl>
                  <dt>WORK      </dt>
                  <dd>coding</dd>
                  <dt>PERIOD   </dt>
                  <dd>2weeks</dd>
                </dl>

              </div>

            </div>
            <!--/実績3-->
          </li>


          <li class="side-scroll-item">
            <!--実績4-->
             <div class="works-container-inner-item">
              <div class="works-img">
                  <img src="http://sap-sutdio.upper.jp/test-images/sap-studio.webp">
              </div>

              <div class="works-header">
                <p>S.A.P.Studio</p>
                <h2>S.A.P.Studio</h2>
              </div>


              <div class="works-body">
                <dl>
                  <dt>WORK      </dt>
                  <dd>coding</dd>
                  <dt>PERIOD   </dt>
                  <dd>2weeks</dd>
                </dl>

              </div>

            </div>
            <!--/実績4-->
          </li>


           <li class="side-scroll-item">
            <!--実績5-->
             <div class="works-container-inner-item">
              <div class="works-img">
                  <img src="http://sap-sutdio.upper.jp/test-images/sap-studio.webp">
              </div>

              <div class="works-header">
                <p>S.A.P.Studio</p>
                <h2>S.A.P.Studio</h2>
              </div>


              <div class="works-body">
                <dl>
                  <dt>WORK      </dt>
                  <dd>coding</dd>
                  <dt>PERIOD   </dt>
                  <dd>2weeks</dd>
                </dl>

              </div>

            </div>
            <!--/実績5-->
          </li>


          
          
           <li class="side-scroll-item">
            <!--実績6-->
             <div class="works-container-inner-item">
              <div class="works-img">
                  <img src="http://sap-sutdio.upper.jp/test-images/sap-studio.webp">
              </div>

              <div class="works-header">
                <p>S.A.P.Studio</p>
                <h2>S.A.P.Studio</h2>
              </div>


              <div class="works-body">
                <dl>
                  <dt>WORK      </dt>
                  <dd>coding</dd>
                  <dt>PERIOD   </dt>
                  <dd>2weeks</dd>
                </dl>

              </div>

            </div>
            <!--/実績6-->
          </li>


           <li class="side-scroll-item">
            <!--実績7-->
             <div class="works-container-inner-item">
              <div class="works-img">
                  <img src="http://sap-sutdio.upper.jp/test-images/sap-studio.webp">
              </div>

              <div class="works-header">
                <p>S.A.P.Studio</p>
                <h2>S.A.P.Studio</h2>
              </div>


              <div class="works-body">
                <dl>
                  <dt>WORK      </dt>
                  <dd>coding</dd>
                  <dt>PERIOD   </dt>
                  <dd>2weeks</dd>
                </dl>

              </div>

            </div>
            <!--/実績7-->
          </li>

        </ul>

      </div>
    </div>

</section>
<!--/制作実績-->
  
  
<div class="space">
縦スクロール
</div>

横スクロールする中身を増やしたり、減らしたりする場合は、

<li class="side-scroll-item">  
</li>

ここを編集すれば、可能です。


■ CSS

.space{
  width:100%;
  height:800px;
  text-align:center;
}


.works {
  width100%;
  background-color#363636;
  overflow: hidden;
}
.works-title {
  width100%;
  padding10px 0;
}
.works-title h1 {
  text-align: center;
  position: relative;
  width140px;
  margin0 auto;
  z-index1;
  padding12px 0;
}
.works-title h1 img {
  position: absolute;
  left0;
  top16px;
  z-index: -1;
}
.works-container {
  width100%;
}
.works-container-inner {
  width100%;
  position: relative;

}
.works-container-inner .side-scroll {
  width100%;
}
.works-container-inner .side-scroll-list-wrapper {
  position: relative;
  width100%;
  height700px;
}
.works-container-inner .side-scroll-list {
  position: absolute;
  top10px;
  left0;
  display: flex;
  gap0px 80px;
}
.works-container-inner .side-scroll-item {
  display: flex;
  align-items: flex-start;
  justify-content: center;
  width400px;
  height420px;
}
.works-container-inner .side-scroll-item + .side-scroll-item {
  margin0 0;
}
.works-container-inner .works-container-inner-item {
  width100%;
  margin0 auto;
  padding0 0 10px 0;
}
.works-container-inner .works-container-inner-item .works-img {
  width100%;
}
.works-container-inner .works-container-inner-item .works-img img {
  width100%;
}
.works-container-inner .works-container-inner-item .works-header {
  width100%;
  margin0 auto;
  padding12px 0px;
}
.works-container-inner .works-container-inner-item .works-header p {
  color#ffffff;
  font-size1.6rem;
  letter-spacing0.03em;
  padding0 0 2px 0;
}
.works-container-inner .works-container-inner-item .works-header h2 {
  color#ffffff;
  font-family"Sawarabi Gothic", sans-serif;
  font-size1.6rem;
  letter-spacing0.03em;
  text-align: center;
}
.works-container-inner .works-container-inner-item .works-body {
  width100%;
  padding0 4px;
  font-size1.6rem;
}
.works-container-inner .works-container-inner-item .works-body dl {
  color#ffffff;
  display: flex;
  flex-wrap: wrap;
  
}
.works-container-inner .works-container-inner-item .works-body dl dt {
  width30%;
  padding10px 0;
}
.works-container-inner .works-container-inner-item .works-body dl dt::after {
  content":";
}
.works-container-inner .works-container-inner-item .works-body dl dd {
  width70%;
  padding10px 0;
  line-height1.26;
}

/* /制作実績 */




■ JavaScript

 // 実績 横スクロール
  const listWrapperEl = document.querySelector('.side-scroll-list-wrapper');
  const listEl = document.querySelector('.side-scroll-list');

  gsap.to(listEl, {
    x() => -(listEl.clientWidth - listWrapperEl.clientWidth),
    ease'none',
    scrollTrigger: {
      trigger'.side-scroll',  //.side-scrollで止める(発火)
      start: 'top top'// 要素の上端(top)が、ビューポートの上端(top)にきた時
      end: () => `+=${listEl.clientWidth - listWrapperEl.clientWidth}`,
      scrubtrue,
      pintrue,
      anticipatePin1,
      invalidateOnRefreshtrue,
    },
  });

GSAPのアニメーションを制御します。

ポイントは、

trigger: '.side-scroll',  //.side-scrollで止める(発火)

です。

どの位置に来たら、横スクロールにうするのかを、指定します。



【 まとめ 】

横スクロールを実装しました。

ユーザーは縦にスクロールする動きを続けると、画面が横スクロールするので、スクロールが楽しくなり、面白い機能だと思います。

しかし、最後までスクロールしないと、それ以下のコンテンツに移動できないので、
リストは増やしすぎないほうが良いでしょう。



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