Intersection Observer API 是一種現代 Web API,旨在觀察目標元素與祖先元素或視口的交集的變化。它提供了一種非同步觀察元素與祖先元素或頂級文件視口的交集變化的方法。這對於實現圖像延遲載入、無限滾動或元素進入視圖時觸發動畫特別有用。
要建立 Intersection Observer,您需要實例化一個新的 IntersectionObserver 物件並傳遞回呼函數和選項物件。這是基本語法:
let observer = new IntersectionObserver(callback, options);
回呼函數有兩個參數:IntersectionObserverEntry 物件陣列和觀察者本身。
function callback(entries, observer) { entries.forEach(entry => { // Handle each intersection change }); }
選項物件可以具有以下屬性:
Intersection Observer API 的常見用例是延遲載入映像。圖像僅在進入視口時才加載,從而減少初始加載時間並節省頻寬。
<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); }); });
另一個用例是實現無限滾動,當使用者滾動到頁面底部附近時會載入更多內容。
<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 提供了一種強大而有效的方法來處理網頁上元素的可見性變化。它提供了具有可自訂閾值和根邊距的細粒度控制,其非同步特性確保它不會阻塞主執行緒。透過利用此 API,開發人員可以實現延遲載入、無限滾動和滾動動畫等功能,從而增強使用者體驗和效能。
以上是了解路口觀察者 API的詳細內容。更多資訊請關注PHP中文網其他相關文章!