Pengendalian acara JavaScript ialah teras membina aplikasi web interaktif dinamik. Walaupun pengendalian acara asas (cth., addEventListener
) adalah mudah, corak lanjutan membolehkan pembangun mengoptimumkan prestasi, mengendalikan interaksi pengguna yang kompleks dan menulis kod yang mudah diselenggara.
Artikel ini meneroka corak pengendalian acara lanjutan dalam JavaScript dan menyediakan contoh praktikal untuk meningkatkan kemahiran pengendalian acara anda.
Apakah itu delegasi acara?
Delegasi acara merujuk kepada melampirkan pendengar acara tunggal pada elemen induk untuk mengurus acara bagi elemen anaknya. Mod ini amat berguna untuk elemen yang ditambah secara dinamik pada DOM selepas halaman dimuatkan.
Contoh:
<code class="language-javascript">document.getElementById("parent").addEventListener("click", function(event) { if (event.target && event.target.matches(".child")) { console.log("点击了子元素:", event.target.textContent); } });</code>
Mengapa menggunakan perwakilan acara?
Apakah itu?
Contoh:
Pendikit
<code class="language-javascript">function throttle(func, limit) { let lastCall = 0; return function(...args) { const now = Date.now(); if (now - lastCall >= limit) { lastCall = now; func.apply(this, args); } }; } window.addEventListener( "resize", throttle(() => { console.log("窗口大小已调整!"); }, 200) );</code>
Anti Goncang
<code class="language-javascript">function debounce(func, delay) { let timer; return function(...args) { clearTimeout(timer); timer = setTimeout(() => func.apply(this, args), delay); }; } const searchInput = document.getElementById("search"); searchInput.addEventListener( "input", debounce(() => { console.log("输入事件触发!"); }, 300) );</code>
Mengapa menggunakannya?
Apakah itu?
Pemancar acara tersuai membenarkan pembangun mencipta, menghantar dan mendengar acara mereka sendiri untuk meningkatkan modulariti.
<code class="language-javascript">const eventEmitter = { events: {}, on(event, listener) { if (!this.events[event]) this.events[event] = []; this.events[event].push(listener); }, emit(event, data) { if (this.events[event]) { this.events[event].forEach((listener) => listener(data)); } }, }; eventEmitter.on("dataReceived", (data) => { console.log("收到数据:", data); }); eventEmitter.emit("dataReceived", { id: 1, message: "Hello!" });</code>
Mengapa menggunakannya?
Apakah pemprosesan acara sekali sahaja?
Kadangkala anda hanya memerlukan pengendali acara untuk melaksanakan sekali. JavaScript moden menyediakan cara yang elegan untuk menangani masalah ini.
Contoh
<code class="language-javascript">const button = document.getElementById("myButton"); button.addEventListener( "click", () => { console.log("按钮被点击!"); }, { once: true } );</code>
Mengapa menggunakannya?
Apakah gubahan pengendali acara?
Komposisi pengendali acara melibatkan penggabungan berbilang pengendali untuk mengendalikan acara secara berurutan.
Contoh
<code class="language-javascript">function composeHandlers(...handlers) { return function(event) { handlers.forEach((handler) => handler(event)); }; } function logClick(event) { console.log("点击:", event.target); } function changeBackground(event) { event.target.style.backgroundColor = "yellow"; } document.getElementById("myElement").addEventListener( "click", composeHandlers(logClick, changeBackground) );</code>
Mengapa menggunakannya?
Apakah itu?
Aliran acara JavaScript dibahagikan kepada dua peringkat:
Contoh
<code class="language-javascript">document.getElementById("parent").addEventListener("click", function(event) { if (event.target && event.target.matches(".child")) { console.log("点击了子元素:", event.target.textContent); } });</code>
Mengapa menggunakannya?
Apakah itu?
preventDefault()
Halang tindakan penyemak imbas lalai (cth. penyerahan borang). stopPropagation()
Menghalang acara daripada disebarkan kepada pendengar lain. Contoh
<code class="language-javascript">function throttle(func, limit) { let lastCall = 0; return function(...args) { const now = Date.now(); if (now - lastCall >= limit) { lastCall = now; func.apply(this, args); } }; } window.addEventListener( "resize", throttle(() => { console.log("窗口大小已调整!"); }, 200) );</code>
Mengapa menggunakannya?
Corak pengendalian acara lanjutan adalah penting untuk membina aplikasi JavaScript yang cekap, interaktif dan mudah diselenggara. Dengan menguasai teknik seperti delegasi acara, pendikitan, pemancar tersuai dan kawalan penyebaran, anda boleh menangani kes penggunaan yang kompleks dengan mudah.
Atas ialah kandungan terperinci Corak Pengendalian Acara Lanjutan dalam JavaScript. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!