JavaScript 觀察者對於創建動態應用程式至關重要,它使開發人員能夠對物件、事件或資料流的變化做出反應。本指南透過詳細的解釋和實際範例探討了各種 JavaScript 觀察者類型。
事件監聽器是基本的 JavaScript 觀察者,對使用者互動(點擊、按鍵、滑鼠移動)等事件做出反應。
<code class="language-javascript">// Select a button const button = document.querySelector('button'); // Add a click listener button.addEventListener('click', (event) => { console.log('Button clicked!', event); }); // Add a mouseover listener button.addEventListener('mouseover', () => { console.log('Mouse over button!'); });</code>
突變觀察者追蹤 DOM 修改(新增、刪除或更改節點),這對於動態更新內容至關重要。
<code class="language-javascript">// Target node const targetNode = document.querySelector('#target'); // Create a MutationObserver const observer = new MutationObserver((mutationsList) => { mutationsList.forEach((mutation) => { console.log('DOM change detected:', mutation); }); }); // Configuration const config = { childList: true, attributes: true, subtree: true }; // Start observing observer.observe(targetNode, config); // Simulate a change setTimeout(() => { const newElement = document.createElement('p'); newElement.textContent = 'New text!'; targetNode.appendChild(newElement); }, 2000);</code>
交叉點觀察器會偵測元素何時進入或退出視口,非常適合延遲載入或動畫。
<code class="language-javascript">// Element to observe const targetElement = document.querySelector('#box'); // Create an IntersectionObserver const observer = new IntersectionObserver((entries) => { entries.forEach((entry) => { if (entry.isIntersecting) { console.log('Element in viewport:', entry.target); } else { console.log('Element out of viewport:', entry.target); } }); }); // Start observing observer.observe(targetElement);</code>
調整大小觀察者監視元素大小的變化,這對於響應式 UI 至關重要。
<code class="language-javascript">// Element to observe const box = document.querySelector('#resizable'); // Create a ResizeObserver const observer = new ResizeObserver((entries) => { entries.forEach((entry) => { const { width, height } = entry.contentRect; console.log(`New size: ${width}px x ${height}px`); }); }); // Start observing observer.observe(box); // Simulate a resize setTimeout(() => { box.style.width = '400px'; box.style.height = '200px'; }, 2000);</code>
代理 API 允許觀察物件屬性更改,從而實現對更新的動態反應。
<code class="language-javascript">// Object to observe const obj = { name: 'John', age: 30 }; // Use Proxy const observedObj = new Proxy(obj, { set(target, property, value) { console.log(`Property '${property}' changed from '${target[property]}' to '${value}'`); target[property] = value; return true; }, }); // Trigger changes observedObj.name = 'Jane'; observedObj.age = 31;</code>
RxJS 提供了先進的觀察者模式實現,以實現高效的資料流管理。
<code class="language-javascript">// Select a button const button = document.querySelector('button'); // Add a click listener button.addEventListener('click', (event) => { console.log('Button clicked!', event); }); // Add a mouseover listener button.addEventListener('mouseover', () => { console.log('Mouse over button!'); });</code>
效能觀察者追蹤效能事件(資源載入、長任務)以最佳化應用程式。
<code class="language-javascript">// Target node const targetNode = document.querySelector('#target'); // Create a MutationObserver const observer = new MutationObserver((mutationsList) => { mutationsList.forEach((mutation) => { console.log('DOM change detected:', mutation); }); }); // Configuration const config = { childList: true, attributes: true, subtree: true }; // Start observing observer.observe(targetNode, config); // Simulate a change setTimeout(() => { const newElement = document.createElement('p'); newElement.textContent = 'New text!'; targetNode.appendChild(newElement); }, 2000);</code>
使用觀察者設計模式為內建 API 以外的場景建立自訂觀察者。
<code class="language-javascript">// Element to observe const targetElement = document.querySelector('#box'); // Create an IntersectionObserver const observer = new IntersectionObserver((entries) => { entries.forEach((entry) => { if (entry.isIntersecting) { console.log('Element in viewport:', entry.target); } else { console.log('Element out of viewport:', entry.target); } }); }); // Start observing observer.observe(targetElement);</code>
JavaScript 觀察器是建立動態和響應式應用程式的強大工具。 掌握這些不同的類型將顯著增強你的 JavaScript 開發能力。 嘗試這些範例以加深您的理解並將它們整合到您的專案中。
以上是了解 JavaScript 中的觀察者:綜合指南的詳細內容。更多資訊請關注PHP中文網其他相關文章!