現代 Web 應用程式需要回應能力、效率和動態互動性。原生 JavaScript API(例如 MutationObserver、IntersectionObserver 和 History API)可讓開發人員直接應對這些挑戰,而無需外部程式庫。讓我們詳細探索這些 API,了解它們的用例,並學習如何有效地利用它們的功能。
概述:
MutationObserver 介面監視 DOM 樹中的更改,替換現已棄用的 Mutation Events。它可以檢測節點何時新增、刪除或修改,使其成為動態應用程式的必備工具。
主要特點:
問。 MutationObserver 是如何運作的?
MutationObserver 實例是使用回呼函數建立的,每當 DOM 中發生指定的變更時就會觸發該回呼函數。
MutationObserver 中的選項
子樹:觀察目標節點及其所有後代。
childList:監視子節點的新增或刪除。
屬性:追蹤目標節點屬性的變更。
attributeFilter:限制對指定屬性的監控。
attributeOldValue:捕獲屬性變更之前的先前值。
characterData:觀察節點文字內容的變化。
characterDataOldValue:捕獲文字內容修改前的先前值。
HTML 語法
<div> <p><strong>JS Syntax</strong><br> </p> <pre class="brush:php;toolbar:false"> const target = document.querySelector('#something') const observer = new MutationObserver(function(mutations){ mutations.forEach(function(mutation){ console.log('Mutation detected:', mutation) }) }) const config = {attributes:true, childList:true, characterData:true, subtree:true} observer.observe(target,config) //observer.disconnect() - to stop observing
用例:
概述:
IntersectionObserver 是一個非同步觀察目標元素相對於根容器或視窗的可見性變化的介面。它通常用於延遲載入、無限滾動和分析。
主要特點:
問。路口觀察器如何運作?
Intersection Observer API 會在發生以下任一情況時觸發回呼:
目標元素與裝置的視口或指定的根元素相交。
觀察者第一次開始觀察目標元素。
路口觀察器中的選項
root:用作檢查可見性的視口的元素。如果未指定,則預設為瀏覽器的視窗。
rootMargin:根周圍的邊距,指定為字串(例如「10px 20px」)。擴大或縮小可觀察區域。
閾值:0 到 1 之間的值(或值數組),指示觸發回調所需的可見性百分比。
問。交集是如何計算的?
Intersection Observer API 使用矩形來計算交叉區域:
不規則形狀的元素被視為適合完全包圍它們的最小矩形。
對於部分可見的元素,使用包含所有可見部分的最小矩形。無論元素形狀或可見性如何,這都可以確保測量的一致性。
基本文法
<div> <p><strong>JS Syntax</strong><br> </p> <pre class="brush:php;toolbar:false"> const target = document.querySelector('#something') const observer = new MutationObserver(function(mutations){ mutations.forEach(function(mutation){ console.log('Mutation detected:', mutation) }) }) const config = {attributes:true, childList:true, characterData:true, subtree:true} observer.observe(target,config) //observer.disconnect() - to stop observing
用例:
進階功能:
概述:
History API 使 Web 應用程式能夠操作瀏覽器的會話歷史記錄。它允許添加、替換或修改條目,而無需重新加載頁面,這是單頁應用程式 (SPA) 的基石。
主要特點:
基本文法:
const observer = new IntersectionObserver((entries, observer) => { entries.forEach(entry => { if (entry.isIntersecting) { console.log('Element is visible in the viewport.') // Optionally stop observing observer.unobserve(entry.target) } }) }) // Target elements to observe const targetElement = document.querySelector('.lazy-load') // Start observing observer.observe(targetElement)
用例:
組合這些 API
這些 API 可以協同工作來建立複雜的 Web 應用程式。例如:
範例用例:
當使用者向下滾動(無限滾動)時,部落格應用程式會動態載入貼文。它還會更新 URL 以反映當前帖子,而無需重新加載頁面,從而確保更好的用戶體驗並改善 SEO。
<div> <p><strong>JS Syntax</strong><br> </p> <pre class="brush:php;toolbar:false"> const target = document.querySelector('#something') const observer = new MutationObserver(function(mutations){ mutations.forEach(function(mutation){ console.log('Mutation detected:', mutation) }) }) const config = {attributes:true, childList:true, characterData:true, subtree:true} observer.observe(target,config) //observer.disconnect() - to stop observing
結論
MutationObserver、IntersectionObserver 和 History API 為動態和互動式 Web 應用程式提供了強大的本機解決方案。透過了解它們的功能並有效地整合它們,開發人員可以建立高效能且功能豐富的應用程序,而無需嚴重依賴外部庫。
以上是原生 JavaScript API 簡介:MutationObserver、IntersectionObserver 與 History API的詳細內容。更多資訊請關注PHP中文網其他相關文章!