より高速で効率的な Web エクスペリエンスを追求する中で、開発者はパフォーマンスを最適化する新しい方法を絶えず模索しています。 Web 開発者の強力なツールの 1 つは、Intersection Observer API です。この API を使用すると、ターゲット要素の可視性の変化を観察できるため、遅延読み込みや遅延コンテンツ読み込みなどの高度な戦略が可能になります。このブログでは、Intersection Observer API を使用して Web サイトのパフォーマンスを向上させる方法を検討します。
Intersection Observer API は、ターゲット要素と祖先要素またはトップレベル ドキュメントのビューポートとの交差部分の変更を非同期に観察する方法を提供します。これは、ユーザーがページを下にスクロールするときに画像やその他のコンテンツを遅延読み込みする場合に特に便利です。
Intersection Observer API の基本的な実装を見てみましょう。
まず、IntersectionObserver のインスタンスを作成します:
let observer = new IntersectionObserver((entries, observer) => { entries.forEach(entry => { if (entry.isIntersecting) { // Perform actions when the element is visible entry.target.src = entry.target.dataset.src; observer.unobserve(entry.target); // Stop observing after loading } }); }, { root: null, // relative to document viewport rootMargin: '0px', // margin around root threshold: 0.1 // visible amount of item shown in relation to root });
観察したい要素を選択して観察を開始します:
document.querySelectorAll('img[data-src]').forEach(img => { observer.observe(img); });
データ属性を使用して HTML 構造が遅延読み込みをサポートしていることを確認します:
さらに制御するには、ルート マージンとしきい値のオプションを調整できます:
rootMargin: '100px' // preload 100px before entering viewport
threshold: [0.25, 0.5, 0.75, 1] // trigger at 25%, 50%, 75%, and 100% visibility
画像を遅延読み込みする完全な例は次のとおりです:
document.addEventListener("DOMContentLoaded", function() { let lazyImages = document.querySelectorAll("img.lazy"); let imageObserver = new IntersectionObserver((entries, observer) => { entries.forEach(entry => { if (entry.isIntersecting) { let img = entry.target; img.src = img.dataset.src; img.classList.remove("lazy"); observer.unobserve(img); } }); }); lazyImages.forEach(image => { imageObserver.observe(image); }); });
Intersection Observer API を実装すると、Web サイトのパフォーマンスとユーザー エクスペリエンスを大幅に向上させることができます。画像の遅延読み込み、重いスクリプトの読み込みの遅延、または無限スクロールの実装のいずれを行う場合でも、この API はコンテンツの可視性を管理するための堅牢かつ効率的な方法を提供します。今すぐ Intersection Observer を使い始めて、Web サイトのパフォーマンスの違いを確認してください!
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3