上毛印刷株式会社

【JavaScript】スクロールで要素をアニメーションさせながら表示

【JavaScript】スクロールで要素をアニメーションさせながら表示

2023年11月09日
WEBサイト制作
  • #備忘録
  • #HTML
  • #css
  • #JavaScript
  • #tips

こんにちは!
上毛印刷WEB制作担当のソーヤです。

今回は、使う場面が非常に多いスクロールで要素を表示させる方法についてご紹介します。
要素がアニメーションしながら出現するので、ユーザーの目に止まりやすい効果があります。
キャンペーンページ以外にも、普通にコーポレートサイトでもよく見かけますよね。

実装例

HTML例

<ul>
    <li class="js-target js-slidein"><img src="/cp/wp/wp-content/uploads/2023/11/24337897.png" alt=""></li>
    <li class="js-target js-jumpin"><img src="/cp/wp/wp-content/uploads/2023/11/23425133.png" alt=""></li>
    <li class="js-target js-ghost"><img src="/cp/wp/wp-content/uploads/2023/11/24364785.png" alt=""></li>
</ul>

CSS例

ul{
    list-style: none;
}
.js-target img{
    width: 100%;
}
.js-target{
    width: 200px;
    margin: 0 auto 50px;
    opacity: 0;
}
.js-slidein{
    position: relative;
    left: -60px;
    transition: .4s;
}
.is-slidein{
    left: 0;
    opacity: 1;
}
@keyframes jumpin {
  0% {
    transform: translateY(0px);
  }
  50% {
    transform: translateY(-60px);
  }
  100% {
    transform: translateY(0px);
  }
}
.is-jumpin{
  animation: jumpin .6s ease-in-out;
  opacity: 1;
}
@keyframes ghost {
  0% {
    transform: translate(60px,60px);
  }
  33% {
    transform: translate(-60px,40px);
  }
  66%{
    transform: translate(60px,20px);
  }
  100% {
    transform: translate(0px,0px);
  }
}
.is-ghost{
  animation: ghost 3s cubic-bezier(0.33, 1, 0.68, 1);
  opacity: 1;
}

キーフレームを使ってアニメーションさせてます。

JavaScript例

window.addEventListener('scroll', function() {
    let scTop = window.scrollY;
    let EffectH = 300;
    let scBottom = scTop + window.innerHeight;
    let effectPos = scBottom - EffectH;
    let jsTarget = document.querySelectorAll('.js-target')
  jsTarget.forEach(function(element) {
    let thisPos = element.offsetTop;
    if (thisPos < effectPos) {
        if (element.classList.contains("js-slidein")) {
            element.classList.add('is-slidein');
        }else if(element.classList.contains("js-jumpin")){
            element.classList.add('is-jumpin');
        }else{
            element.classList.add('is-ghost');
        }
    }
  });
});

まとめ

久しぶりにキーフレームを使ったので、完全に使い方を忘れていました・・・

ちなみに今回もjQueryではなく、Vanilla.jsで実装してみました。
コピペしてガンガン使ってください!

WEB制作担当ソーヤ

ソーヤ

上毛印刷WEB制作担当
前職は東証プライム企業の本社WEB受託チームにてフロントエンドエンジニアを3年経験。


この記事に対するご意見・ご感想・ご質問等ありましたら、
ぜひ下記フォームにてお送りください。

    お名前必須
    メールアドレス必須
    お問い合わせ内容必須
    PAGE TOP