jQueryに頼らず、JavaScriptとCSSアニメーションでスクロールエフェクトを実装する方法

jQueryに頼らず、JavaScriptとCSSアニメーションでスクロールエフェクトを実装する方法

jQueryに頼らず、JavaScriptとCSSアニメーションでスクロールエフェクトを実装する方法

jQueryを使わずにスクロールアニメーションを実装する方法をご紹介いたします。スクロールしていって可視範囲に要素が入ったら、ふわっとアニメーションしながら表示させます。

意外とコード量は少なくて済むので、スクロールアニメーションを実装する際はjQueryに依存しなくても良いのかなと思います。

素のJavaScriptとCSSでスクロールアニメーションを実装する方法

ステップ1. HTMLのマークアップ

HTMLでは、アニメーション表示したい箇所に.animateを追加します。

<div class="animate">
  スクロールアニメーション要素
</div>

<ul class="list">
  <li class="animate">スクロールアニメーション要素1</li>
  <li class="animate animate2">スクロールアニメーション要素2</li>
  <li class="animate animate3">スクロールアニメーション要素3</li>
</ul>

.animate2と.animate3は、タイミングをずらして表示するためのクラスです。.animate→.animate2→.animate3の順番で表示するようにCSSで指定します。

ステップ2. CSSで表示する時のアニメーションを指定

続いて、CSSで要素を表示する時のアニメーションを指定します。

.animate {
  visibility: hidden;
}

.animate.is-show {
  animation: show 1s both;
  visibility: visible;
}

.animate2.is-show {
  animation-delay: .2s;
}

.animate3.is-show {
  animation-delay: .4s;
}

@keyframes show {
  0% {
    opacity: 0;
    transform: translateY(30px);
  }
  100% {
    opacity: 1;
    transform: translateY(0);
  }
}

.animateは非表示にしておき、.is-showが付いたらアニメーションしながら表示します。30px下にずらしていた要素が元の位置に戻りながら、下から上にふわっと表示されます。

.animate2と.animate3は、animation-delayで表示タイミングをずらしています。

ステップ3. JavaScriptで要素が可視範囲に入ったらクラスを追加

.is-showの追加処理はJavaScriptで実装します。

<script>
let scrollElem = document.querySelectorAll('.animate');
let scrollAnimation = function() {
  for(let i = 0; i < scrollElem.length; i++) {
    let trigger = 50;
    if (window.innerHeight > scrollElem[i].getBoundingClientRect().top + trigger) {
      scrollElem[i].classList.add('is-show');
    }
  }
}
window.addEventListener('load', scrollAnimation);
window.addEventListener('scroll', scrollAnimation);
</script>

「document.querySelectorAll(‘.animate’)」で.animateの要素を取得します。

getBoundingClientRect().topでブラウザ上部からその要素までの距離を取得しています。そこにtriggerの値(上記の場合は50px)を追加し、window.innerHeight(ブラウザ内の高さ)と比較することで、その要素が画面内に50px入ったら表示させています。triggerの値を変更することで、もっと遅くしたり早くしたりできます。

「window.addEventListener(‘load’, scrollAnimation);」と「window.addEventListener(‘scroll’, scrollAnimation);」で、ページ読み込み完了時とスクロール時にスクリプトを実行させるという処理になっています。

ページ読み込み完了時にも処理を実行することで、既に画面内に収まっている要素をまずは表示させる感じですね。これをやっておかないとスクロールが開始されるまで要素が表示されません。

あとがき

jQueryを使った実装方法については、「CSSアニメーションとjQueryを使って要素にスクロールアニメーション効果を加える方法」という投稿で紹介しています。見比べてみると、jQueryよりもコード量は少ないですね。

jQueryに依存させたくない時は、ぜひ参考にしていただければと思います。

この記事が気に入ったら
いいね!してね♪

Twitter で

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です