JavaScript 事件捕獲
事件捕獲對於很多朋友比較陌生,實際編寫程式碼中應用較少。
大家普遍比較熟悉的是事件冒泡,它應用廣泛,帶來了很多便利。
對於知識點的掌握不要太功利,有些當前用不到的知識,可能在未來某個時刻發揮舉足輕重作用。
就如同生活中交朋友,也不要太勢力,誠實待人才是關鍵,誰知道未來誰會真正幫助你。
JavaScript事件的傳播分為兩個過程:
(1).事件捕獲階段。
(2).事件冒泡階段。
關於事件冒泡可以參閱JavaScript 事件冒泡一章節。
事件捕獲階段在事件冒泡階段之前,圖示如下:
特別說明:下圖來源於一外文網站,在此特別感謝。
圖示分析說明如下:
(1).圖中數字順序就是事件傳播的順序。
(2).事件捕獲先於事件冒泡。
(3).事件捕獲恰好與事件冒泡相反,它從頂層祖先元素開始,直到事件觸發元素。
下面再通過程式碼例項演示一下事件捕獲階段的存在。
首先看一下addEventListener的語法結構:
[JavaScript] 純文字檢視 複製程式碼target.addEventListener(type, listener, useCapture)
很少朋友會關注第三個引數的真正作用,只是將它預設設定為false即可。
此引數規定是在捕獲階段觸發事件還是在冒泡階段觸發事件,false表示在冒泡階段觸發事件。
正是由於工作中頻繁使用事件冒泡,絕少使用事件捕獲,從而甚至感覺第三個引數值固定為false一般。
程式碼例項如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style type="text/css"> *{ margin:0px; padding:0px; } #box{ width:400px; height:400px; background-color:blue; } #middle{ height:200px; width:200px; background-color:green; } #inner{ height:50px; width:50px; background-color:red; } </style> <script> window.onload=function(){ let obox=document.getElementById("box"); let omiddle=document.getElementById("middle"); let oinner=document.getElementById("inner"); obox.addEventListener("click",function(){console.log("box")},true); omiddle.addEventListener("click",function(){console.log("middle")},true); oinner.addEventListener("click",function(){console.log("inner")},true); } </script> </head> <body> <div id="box"> <div id="middle"> <div id="inner"></div> </div> </div> </body> </html>
點選最內側的紅色div測試效果,程式碼執行效果截圖如下:
addEventListener方法的第三個引數為true,說明在捕獲階段觸發事件。
點選inner元素後,如果是事件冒泡觸發,那麼事件由觸發元素向頂層元素傳播。
而事件捕獲則恰好相反,所以列印的id值順序是從外到內。
相關文章
- JavaScript事件捕獲冒泡與捕獲JavaScript事件
- javascript事件捕獲是什麼意思JavaScript事件
- Javascript中的事件冒泡與捕獲JavaScript事件
- 關於js事件冒泡和事件捕獲JS事件
- 理解js的事件冒泡和事件捕獲JS事件
- 事件的捕獲、冒泡、委託事件
- javascript捕獲組如何使用JavaScript
- JS中的事件順序(事件捕獲與冒泡)JS事件
- 記錄Javascript 異常捕獲JavaScript
- jQuery捕獲jQuery
- Sentry(v20.12.1) K8S 雲原生架構探索, SENTRY FOR JAVASCRIPT 手動捕獲事件基本用法K8S架構JavaScript事件
- 前端JavaScript 常見的報錯及異常捕獲前端JavaScript
- 事件溯源模式:分離事件的發生和捕獲兩種不同時間 - verraes事件模式
- Spirit帶你徹底瞭解事件捕獲和冒泡機制事件
- 錯誤捕獲
- 捕獲 React 異常React
- 捕獲cookie的值Cookie
- 異常及捕獲
- python異常捕獲Python
- 使用嵌入式Debezium和SpringBoot捕獲更改資料事件(CDC) - Sohan GanapathySpring Boot事件
- WPF雙滑塊控制元件以及強制捕獲滑鼠事件焦點控制元件事件
- 【目標區域捕獲-2】目標區域捕獲簡介
- 事件溯源的好處在於可在軟體中捕獲現實世界 – Jessitron事件
- android 異常捕獲-UncaughtExceptionHandlerAndroidException
- C++ lambda 捕獲列表C++
- 【Android ViewPager】解決ViewPager使用DepthPageTransformer時事件會被下一頁捕獲導致事件錯亂的問題AndroidViewpagerORM事件
- JavaScript事件JavaScript事件
- JavaScript 事件JavaScript事件
- iOS Crash的捕獲知識iOS
- Wireshark的捕獲過濾器過濾器
- 正則匹配的捕獲組
- python中如何捕獲異常Python
- jQuery---捕獲與設定jQuery
- pb呼叫ole異常捕獲
- 捕獲NSLog日誌小記
- go 閉包捕獲問題Go
- wpf 捕獲全域性異常
- StackOverflowError是無法捕獲的Error