事件觸發有三個階段:window 往事件觸發處傳播,遇到注冊的捕獲事件會觸發傳播到事件觸發處時觸發注冊的事件從事件觸發處往 window 傳播,遇到注冊的冒泡事件會觸發事件觸發一般來說會按照上面的順序進行,但是也有特例,如果給一個 body 中的子節點同時注冊冒泡和捕獲事件,事件觸發會按照注冊的順序執行。
通常使用 addEventListener 注冊事件,該函數的第三個參數可以是布爾值,也可以是對象。對于布爾值 useCapture 參數來說,該參數默認值為 false ,useCapture 決定了注冊的事件是捕獲事件還是冒泡事件。對于對象參數來說,可以使用以下幾個屬性:
capture:布爾值,和 useCapture 作用一樣
once:布爾值,值為 true 表示該回調只會調用一次,調用后會移除監聽
passive:布爾值,表示永遠不會調用 preventDefault