IntersectionObserverでスクロール表示アニメーションを作る実践例【JS軽量・実務向け・コピペOK】

スクロールしたときに、要素がふわっと表示されるアニメーションは、今では多くのWebサイトで使われています。
以前はスクロールイベントを使って制御する方法が主流でしたが、現在は IntersectionObserver を使った方法が軽量で実務向きです。
この記事では、
・軽くて安定したスクロール表示アニメーション
・jQuery不要
・コピペで使える
・実務案件でも使える設計
で実装する方法を、動くデモとあわせて解説します。
動くデモはこちら
実際に動作するサンプルページを用意しています。
▼ デモページ
https://disegno-k.biz/demo/js/intersectionobserver-scroll-demo
コードだけ見たい方も、まずは動きを確認してみてください。
なぜIntersectionObserverを使うのか
従来の scroll イベント監視は、スクロール中ずっと処理が走るため、ページによっては負荷が高くなります。
IntersectionObserverを使うと、
・画面内に入った時だけ発火
・無駄な計算が減る
・処理が安定する
・モバイルでも軽い
というメリットがあります。
実務では「軽さ」と「安定性」が重要なので、この方法をおすすめします。
今回作るアニメーション仕様
今回のサンプルでは次の3種類を用意します。
・下からフェード表示
・左からスライド表示
・ズーム表示
クラスを付け替えるだけで再利用できる設計にします。
コピペで動くコード一式
<section class="block fade-up">
<h2>見出しテキスト</h2>
<p>スクロールで表示されます。</p>
</section>
<section class="block fade-left">
<h2>カード表示</h2>
<p>横からスライドします。</p>
</section>
<section class="block zoom-in">
<h2>CTAエリア</h2>
<p>ズームで表示されます。</p>
</section>.block {
margin: 120px auto;
max-width: 700px;
padding: 40px;
background: #f5f5f5;
}
/* 初期状態 */
.fade-up,
.fade-left,
.zoom-in {
opacity: 0;
transition: all 0.8s ease;
}
/* 各アニメーション */
.fade-up {
transform: translateY(40px);
}
.fade-left {
transform: translateX(-40px);
}
.zoom-in {
transform: scale(0.9);
}
/* 表示状態 */
.is-show {
opacity: 1;
transform: none;
}const targets = document.querySelectorAll('.fade-up, .fade-left, .zoom-in');
const observer = new IntersectionObserver((entries, obs) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add('is-show');
obs.unobserve(entry.target); // 一度だけ表示
}
});
}, {
root: null,
rootMargin: "0px 0px -15% 0px",
threshold: 0.2
});
targets.forEach(el => observer.observe(el));オプション設定の意味(ここが実務ポイント)
threshold
threshold: 0.2要素が20%見えたら発火。
早すぎず遅すぎず、実務で使いやすい値です。
rootMargin
rootMargin: "0px 0px -15% 0px"
少し手前で発火させる調整。
「見えた瞬間より少し前」に動かしたいときに便利です。
一度だけ表示させる理由
unobserve()
を入れることで、
・再スクロールで再発火しない
・無駄な監視を止める
・処理が軽くなる
LPや企業サイトでは「一度だけ表示」が基本です。
実務での使いどころ
この方式は次のような場所でよく使います。
・サービス紹介ブロック
・カード一覧
・実績紹介
・写真ギャラリー
・料金表
・CTAセクション
派手すぎず、読みやすさを邪魔しないのがポイントです。
よくあるミス
表示されない場合
・クラス名の付け忘れ
・observeしていない
・display を使っている
・transitionを書いていない
まずここを確認してください。
カスタマイズ例
表示をもっと早くする
threshold: 0.1
移動距離を変える
transform: translateY(80px);
時間差表示をしたい場合
.delay-1 { transition-delay: .1s; }
.delay-2 { transition-delay: .2s; }
まとめ
IntersectionObserverを使えば、
・軽量
・安定
・再利用しやすい
・実務でも安心
なスクロール表示アニメーションを簡単に実装できます。
まずはデモページのコードをそのまま動かして、必要に応じて距離や速度を調整してみてください。
▼ 実際に動くサンプルはこちら
https://disegno-k.biz/demo/js/intersectionobserver-scroll-demo
※このサンプルは実装サンプル集としてシリーズ化していきます。
投稿者プロフィール
最新の投稿
webデザイン2026年2月14日IntersectionObserverでスクロール表示アニメーションを作る実践例【JS軽量・実務向け・コピペOK】
ブログの書き方2026年2月10日オウンドメディアを持つ意味とは?
SEO2026年2月9日SEOを意識しなくても検索で評価されるホームページの考え方
ブログの書き方2026年2月8日ブログ記事は一気に投稿する?毎日投稿する?GoogleとSEOについて


