事件是用戶操作網(wǎng)頁時發(fā)生的交互動作,比如 click/move, 事件除了用戶觸發(fā)的動作外,還可以是文檔加載,窗口滾動和大小調(diào)整。事件被封裝成一個 event 對象,包含了該事件發(fā)生時的所有相關(guān)信息( event 的屬性)以及可以對事件進(jìn)行的操作( event 的方法)。
事件是用戶操作網(wǎng)頁時發(fā)生的交互動作或者網(wǎng)頁本身的一些操作,現(xiàn)代瀏覽器一共有三種事件模型:DOM0 級事件模型,這種模型不會傳播,所以沒有事件流的概念,但是現(xiàn)在有的瀏覽器支持以冒泡的方式實現(xiàn),它可以在網(wǎng)頁中直接定義監(jiān)聽函數(shù),也可以通過 js 屬性來指定監(jiān)聽函數(shù)。所有瀏覽器都兼容這種方式。直接在dom對象上注冊事件名稱,就是DOM0寫法。
IE 事件模型,在該事件模型中,一次事件共有兩個過程,事件處理階段和事件冒泡階段。事件處理階段會首先執(zhí)行目標(biāo)元素綁定的監(jiān)聽事件。然后是事件冒泡階段,冒泡指的是事件從目標(biāo)元素冒泡到 document,依次檢查經(jīng)過的節(jié)點是否綁定了事件監(jiān)聽函數(shù),如果有則執(zhí)行。這種模型通過attachEvent 來添加監(jiān)聽函數(shù),可以添加多個監(jiān)聽函數(shù),會按順序依次執(zhí)行。
DOM2 級事件模型,在該事件模型中,一次事件共有三個過程,第一個過程是事件捕獲階段。捕獲指的是事件從 document 一直向下傳播到目標(biāo)元素,依次檢查經(jīng)過的節(jié)點是否綁定了事件監(jiān)聽函數(shù),如果有則執(zhí)行。后面兩個階段和 IE 事件模型的兩個階段相同。這種事件模型,事件綁定的函數(shù)是addEventListener,其中第三個參數(shù)可以指定事件是否在捕獲階段執(zhí)行。