ホームページ > 記事 > ウェブフロントエンド > Intersection Observer API について
Intersection Observer API は、ターゲット要素と祖先要素またはビューポートの交差の変化を監視するように設計された最新の Web API です。これは、要素と祖先要素、またはトップレベル ドキュメントのビューポートとの交差部分の変更を非同期的に観察する方法を提供します。これは、画像の遅延読み込み、無限スクロール、要素が表示されたときのアニメーションのトリガーを実装する場合に特に役立ちます。
Intersection Observer を作成するには、新しい IntersectionObserver オブジェクトをインスタンス化し、コールバック関数とオプション オブジェクトを渡す必要があります。基本的な構文は次のとおりです:
let observer = new IntersectionObserver(callback, options);
コールバック関数は、IntersectionObserverEntry オブジェクトの配列とオブザーバー自体の 2 つの引数を取ります。
function callback(entries, observer) { entries.forEach(entry => { // Handle each intersection change }); }
オプション オブジェクトには次のプロパティを含めることができます:
Intersection Observer API の一般的な使用例の 1 つは、画像の遅延読み込みです。画像はビューポートに入ったときにのみ読み込まれるため、初期読み込み時間が短縮され、帯域幅が節約されます。
<img data-src="image.jpg" alt="Lazy Loaded Image">
document.addEventListener("DOMContentLoaded", function() { let lazyImages = document.querySelectorAll('img[data-src]'); let observer = new IntersectionObserver((entries, observer) => { entries.forEach(entry => { if (entry.isIntersecting) { let img = entry.target; img.src = img.getAttribute('data-src'); img.removeAttribute('data-src'); observer.unobserve(img); } }); }); lazyImages.forEach(img => { observer.observe(img); }); });
もう 1 つの使用例は、ユーザーがページの下部付近をスクロールすると、より多くのコンテンツが読み込まれる無限スクロールの実装です。
<div class="content"></div> <div class="loader">Loading...</div>
let content = document.querySelector('.content'); let loader = document.querySelector('.loader'); let observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { loadMoreContent(); } }); }, { root: null, rootMargin: '0px', threshold: 1.0 }); observer.observe(loader); function loadMoreContent() { // Fetch and append new content to the content div }
Intersection Observer API を使用して、要素が表示されたときにアニメーションをトリガーすることもできます。
<div class="animate-on-scroll">Animate me!</div>
let animateElements = document.querySelectorAll('.animate-on-scroll'); let observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { entry.target.classList.add('animated'); } else { entry.target.classList.remove('animated'); } }); }, { root: null, rootMargin: '0px', threshold: 0.5 }); animateElements.forEach(el => { observer.observe(el); });
複数のしきい値を指定して、さまざまな可視性レベルでコールバックをトリガーできます。
let options = { root: null, rootMargin: '0px', threshold: [0, 0.25, 0.5, 0.75, 1] };
さまざまな条件に基づいてルートマージンを動的に調整できます。
let options = { root: null, rootMargin: calculateRootMargin(), threshold: 0 }; function calculateRootMargin() { // Calculate and return root margin based on conditions }
Intersection Observer API は、Web ページ上の要素の可視性の変更を処理する強力かつ効率的な方法を提供します。カスタマイズ可能なしきい値とルート マージンによるきめ細かい制御を提供し、非同期の性質によりメイン スレッドをブロックしません。この API を活用することで、開発者は遅延読み込み、無限スクロール、スクロール時のアニメーションなどの機能を実装し、ユーザー エクスペリエンスとパフォーマンスを向上させることができます。
以上がIntersection Observer API についての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。