做網(wǎng)站服務商新鄉(xiāng)網(wǎng)絡推廣外包
JavaScript與HTML之間的交互是通過事件實現(xiàn)的,而用戶與瀏覽器頁面的互動也是通過事件來實現(xiàn)的事件就是文檔或瀏覽器窗口中發(fā)生的一些特定的交互瞬間,所以分為兩種事件,一是發(fā)生在 瀏覽器對象(BOM)上的事件,一是發(fā)生在 文檔對象(DOM)上的事件。
瀏覽器規(guī)定了兩種事件流模型: 捕獲型事件流 和 冒泡型事件流 。
頁面觸發(fā)一個事件時,會按照一定的順序來響應事件,事件的響應過程為事件流。
在實際中,事件流包括了三個階段:事件捕獲階段,處于目標階段,事件冒泡階段,當點擊一個div元素時,以下就是事件流的順序:
1. 頂級對象(window)接收到click事件,然后逐級向下捕獲
2. 目標元素(div)接收到到事件
3. 對事件做出響應,逐級向上冒泡到頂級對象。
1. 頂級對象(window)接收到click事件,然后逐級向下捕獲
2. 目標元素(div)接收到到事件
3. 對事件做出響應,逐級向上冒泡到頂級對象。
事件冒泡是目標元素接受事件,然后逐級向上傳播到頂級元素為止。
<!DOCTYPE html>
<html>
<head></head>
<body><div>click me</div>
</body>
</html>
點擊div元素,click事件會沿著DOM樹向上傳播,在每一級節(jié)點都會發(fā)生,冒泡順序為:div -> body -> html -> document。
事件捕獲與事件冒泡是相反的,是頂級元素先接收到事件,再逐級向下傳播到目標元素為止
同樣是以上示例,document對象會先接收到click事件,然后沿著DOM樹向下傳播到事件的目標元素,捕獲順序為:document -> html -> body -> div,瀏覽器都是從window對象開始捕獲的。