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