【インターセクションオブザーバー】

Intersection Observer とは?

💡 「見えた?」を自動で教えてくれる、スクロール監視の優等生
📌 このページのポイント
Intersection Observer — 要素の可視性を監視 ビューポート(画面) rootMargin: 200px 要素A(表示中) 要素B 交差率 50% isIntersecting: true → 画像を読み込む intersectionRatio: 0.5 → アニメーション発火 主な活用 遅延読み込み / 無限スクロール 広告計測 / 目次ハイライト
Intersection Observerのイメージ
ひよこ ひよこ

要素が画面に入ったかどうかって、スクロールイベントで調べられるんじゃないの?

ペンギン先生 ペンギン先生

できるけど、scrollイベントは1秒間に何十回も発火するから、getBoundingClientRect()を毎回呼ぶとパフォーマンスが悪いんだ。Intersection Observerはブラウザが最適なタイミングで非同期コールバックを呼んでくれるから、メインスレッドを圧迫しないよ

ひよこ ひよこ

どうやって使うの?

ペンギン先生 ペンギン先生

new IntersectionObserver(callback, options)でオブザーバーを作って、observer.observe(element)で監視対象を登録するだけだよ。要素が表示領域と交差したらコールバックが呼ばれて、交差の割合などの情報が渡されるんだ

ひよこ ひよこ

画像の遅延読み込み以外にも使えるの?

ペンギン先生 ペンギン先生

たくさんあるよ。無限スクロールの「次を読み込む」トリガー、広告のビューアビリティ計測、アニメーションの発火タイミング、目次のハイライト切り替えなど、「要素が見えたら何かする」パターンすべてに使えるんだ

ひよこ ひよこ

rootMarginってオプションは何に使うの?

ペンギン先生 ペンギン先生

ビューポートの検知範囲を広げたり狭めたりできるオプションだよ。たとえばrootMarginを「200px」に設定すると、画面に入る200px手前で検知してくれるから、画像のプリロードに最適なんだ。ユーザーがスクロールする前に画像を読み込み始められるよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Intersection Observer」って出てきたら「要素が画面に見えたかを監視するAPI」と思えればだいたいOK!
📖 おまけ:英語の意味
「Intersection Observer」 = 交差の監視者
💬 Intersection(交差)は、要素の領域とビューポートの領域が「交差する」=「重なる」こと。それをObserve(監視)するAPIだよ
← 用語集にもどる