皆さんはjsアニメーションのライブラリは何を使用していますか?

私はAOSを使用することがほとんどで、複雑な場合は発火だけjsに任せてcssアニメーションで調整するようにしています。

今回はそんなAOSとsmooth-scrollを使用して、スクロールが引っかかって困ったスクロールバグの話です。

# この記事で解決すること

  • AOSでのスクロールバグ(引っかかり)を解決できる

 

前提

今回はトラブル解決です。

使用したライブラリは下記のとおりです。

問題

例えば下記のような構文があるとします。

<html>
  <body>
    <main>
      <article>
        <section id="hoge" class="hoge" data-aos="fade-left">
          <div class="hoge__inner">hogehoge</div>
        </section>
        <section class="fuga" data-aos="fade-right">
          <div class="fuga__inner">fugafuga</div>
        </section>
      </article>
    </main>
    <!-- smooth-scrollでhogeに行くボタン -->
    <div class="to-con-1">
      <a href="#hoge">hogeへ</a>
    </div>
  </body>
</html>

上記の場合、右側に余白ができることが予想されます。

そこで、overflow-x: hidden;をかける必要があります。

私の場合は一つ一つの要素に対してoverflowをかけるのが面倒だと思ったので、<main>に対してかけていました。

そして、smooth-scroll#hogeへ戻ると、そこからスクロールの引っかかりが発生しました。

スマホが主ですが、すごくゆっくりスクロールしないと下にスクロールできない状況です。

原因

原因はこの部分です。

私の場合は一つ一つの要素に対してoverflowをかけるのが面倒だと思ったので、<main>に対してかけていました。

以前にも<body><html>overflowをかけて同じようなことが起こりました。

解決

上記の問題点から、overflowをかけて問題ない範囲の最小要素に対してかける必要があるということです。

今回でいうと各<section>overflowをかけるとトラブルなく解決することができます。

positiontransformを使用して<section>外に要素がはみ出している場合は、更に上にwrapperを設けるなどして調整する必要があります。

最後に

AOSは便利なのですが、見え方の部分で調整が必要な場合があり、トラブルになった時に初心者の方はつまづきやすいライブラリです。

プログラム全般で同じことがいえますが、トラブルが起きた時に、問題点・原因・解決策をとどめておくことは重要なことです。

皆さんもトラブルが起きた時は、上記を踏まえて冷静に対処するようにしましょう。