コーディングをしていると「スクロールしたら要素をふわっと表示させたい」という場面、よくありますよね。以前はjQueryのscrollイベントで実装することが多かったですが、今はバニラJSのIntersectionObserverを使うのがシンプルでおすすめです。
IntersectionObserverとは?
要素が画面内に入ったかどうかを監視してくれるブラウザのAPIです。スクロールイベントと違い、パフォーマンスへの影響が少ないのが大きなメリットです。
表示イメージ
See the Pen IntersectionObserverでスクロールアニメーションを実装する方法 by Yushi nakagaki (@YUSHI-NAKAGAKI) on CodePen.
実装コード
<div class="fade-item">ふわっと表示されます</div>
<div class="fade-item">ふわっと表示されます</div>
<div class="fade-item">ふわっと表示されます</div>.fade-item {
opacity: 0;
transform: translateY(30px);
transition: opacity 0.6s ease, transform 0.6s ease;
}
.fade-item.is-show {
opacity: 1;
transform: translateY(0);
}const items = document.querySelectorAll('.fade-item');
const observer = new IntersectionObserver((entries) => {
entries.forEach((entry) => {
if (entry.isIntersecting) {
entry.target.classList.add('is-show');
}
});
});
items.forEach((item) => {
observer.observe(item);
});カスタマイズのポイント
transitionの秒数を変えるとアニメーションの速さが変わります。translateYの値を大きくすると、より下から上に動く演出になります。複数要素に順番差をつけたいときは、CSSでtransition-delayを要素ごとに指定するのが簡単です。
まとめ
IntersectionObserverはjQueryなしで使えて、コードもシンプルにまとまります。スクロールアニメーションの実装で迷ったときはぜひ試してみてください。
