0Pricing
JavaScript Academy · レッスン

要素の表示状態を監視する

オブザーバーを作成して要素を監視します。

「要素の表示状態を監視する」はCoddyKit上の無料JavaScript Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJavaScript Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 JavaScript Academyコースには全4レッスンが含まれています。

Intersection Observer が必要な理由

従来、要素がビューポートに入ったことを検出するには、scroll を監視し、getBoundingClientRect を何度も呼び出す必要がありました。その方法は遅く、カクつきの原因になります。

Intersection Observer API は、メインスレッド外で可視性を効率的かつ非同期に監視します。

オブザーバーの作成

new IntersectionObserver(callback) でオブザーバーを作成します。監視対象の要素の可視性がしきい値をまたぐたびに、コールバックが実行されます。

const observer = new IntersectionObserver((entries) => {
  entries.forEach(entry => {
    console.log(entry.target, entry.isIntersecting);
  });
});

要素の監視

observer.observe(element) を呼び出すと、対象の監視を開始できます。1 つのオブザーバーで複数の要素を監視できます。

const box = document.querySelector('.box');
observer.observe(box);

// Watch several at once:
document.querySelectorAll('.card')
  .forEach(el => observer.observe(el));

isIntersecting フラグ

各エントリには boolean の isIntersecting があり、対象が現在ルート(デフォルトではビューポート)と重なっているかどうかを示します。

const observer = new IntersectionObserver((entries) => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      console.log('element is now visible');
    }
  });
});

エントリの詳細

各 IntersectionObserverEntry には、次のような便利なデータが含まれています。

  • target — 監視対象の要素
  • isIntersecting — ルートと交差しているかどうか
  • intersectionRatio — 表示されている割合(0 から 1)
  • boundingClientRect — 対象の矩形
(entries) => {
  entries.forEach(e => {
    console.log('visible portion:', e.intersectionRatio);
  });
}

threshold オプション

threshold オプションは、どの可視率でコールバックを呼び出すかを制御します。0 では1ピクセルでも表示されると呼び出され、1 では完全に表示された場合にのみ呼び出されます。

const observer = new IntersectionObserver(callback, {
  threshold: 0.5 // fire when 50% visible
});

// You can pass an array for multiple steps:
// threshold: [0, 0.25, 0.5, 0.75, 1]

root オプション

デフォルトでは、オブザーバーはブラウザのビューポートを基準に測定します。root にスクロール可能な祖先要素を設定すると、代わりにそのコンテナ内での可視性を測定できます。

const list = document.querySelector('.scroll-area');
const observer = new IntersectionObserver(callback, {
  root: list // measure visibility inside this container
});

rootMargin オプション

rootMargin は CSS のマージンと同じように、root の境界ボックスを拡大または縮小します。正の値を指定すると、要素が実際に画面に表示される前にコールバックが呼び出されます。

const observer = new IntersectionObserver(callback, {
  rootMargin: '200px' // start reacting 200px before visible
});

監視の停止

1つの要素の監視を停止するには observer.unobserve(element) を呼び出し、すべての要素の監視を停止するには observer.disconnect() を呼び出します。これは後処理や1回限りのトリガーに重要です。

const observer = new IntersectionObserver((entries) => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      doSomething(entry.target);
      observer.unobserve(entry.target); // fire once
    }
  });
});

効率的な理由

ブラウザは交差を内部で計算し、通知をまとめて処理します。そのため、スクロールのフレームごとに JavaScript を実行する必要がありません。これによりレイアウトスラッシングを防ぎ、多数の対象があってもスクロールを滑らかに保てます。

よくある用途

Intersection Observer は、実際の多くの機能を支えています。

  • 画像や iframe の遅延読み込み
  • 無限スクロール
  • スクロールをトリガーにしたアニメーション
  • 広告やコンテンツのインプレッションの追跡

この後、これらのいくつかを実装します。

確認問題

Intersection Observer の基本についての理解度を確認します。

まとめ

Intersection Observer の基本を学びました。

  • new IntersectionObserver(callback, options) で作成します。
  • observe で監視を開始し、unobserve/disconnect で停止します。
  • 各エントリから isIntersecting と intersectionRatio を取得できます。
  • threshold、root、rootMargin で呼び出しのタイミングを調整します。
  • スクロールリスナーよりもはるかに効率的です。

次は、これを使って画像を遅延読み込みします。

よくある質問

「要素の表示状態を監視する」レッスンは無料ですか?

はい。「要素の表示状態を監視する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、JavaScript Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 JavaScript Academyコースには全4レッスンが含まれています。

「要素の表示状態を監視する」で何を学びますか?

オブザーバーを作成して要素を監視します。 ブラウザで直接実行するハンズオンコードでJavaScript Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

JavaScript Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのJavaScript Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「要素の表示状態を監視する」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このJavaScript Academyレッスンでコードを書いて実行できますか?

はい。すべてのJavaScript Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. 要素の表示状態を監視する
  2. 画像の遅延読み込み
  3. 無限スクロール
  4. スクロールで発火するアニメーション
← JavaScript Academyに戻る