JS篇(事件冒泡/捕獲/Dom事件流,事件委托)

一、DOM事件流:

1.什么是事件流:事件流描述的是從頁面中接收事件的順序。
即是,事件的流向,先捕獲,再到事件源,最后再冒泡。

事件流是從頁面接收事件的順序,DOM2級事件規(guī)定事件流包括三個階段:

①事件捕獲階段:用意在于事件達到目標之前捕獲它,在事件捕獲階段事件流模型:document→html→body→div

②處于目標階段2:實際的目標到事件

③事件冒泡階段:由最具體的元素接收到事件,然后向上傳播到較為不具體的節(jié)點。事件流模型:div →body→ html→ document

說到事件冒泡就不得不提一下dom0級事件與dom2及事件


// dom0級事件會覆蓋,如下控制臺只會輸出結果 2:

var oDiv=document.getElementById('div');

  oDiv.onclick=function(){

        console.log(1)

     }

     oDiv.onclick=function(){

        console.log(2)

     }        

// dom0級事件只有事件冒泡,沒有事件捕獲
 

// dom2級事件不會覆蓋,如控制臺只會輸出結果 1,2:

 var oDiv=document.getElementById('div');

   oDiv.addEventListener('click',function(){

          console.log(1)

  },true)

  

   oDiv.addEventListener('click',function(){

          console.log(2)

  },true)

dom2級事件涉及到事件捕獲,第三個參數(shù)布爾值如果為false,就是事件冒泡,否則就是事件捕獲


image.png

??事件冒泡:從事件源朝父級一直到根元素(HTML)。當某個元素的某類型事件被觸發(fā)時,那么它的父元素同類型的事件也會被觸發(fā),一直觸發(fā)到根源上;

 從具體的元素到不確定的元素。

??事件捕獲: 從根元素(HTML)到事件源,當某個元素的某類型事件被觸發(fā)時,先觸發(fā)根元素的同類型事件,朝子一級觸發(fā),一直觸發(fā)到事件源。

從不確定的元素到具體的元素。

??事件冒泡(原理):就是元素自身的事件被觸發(fā)后,如果父元素的有相同的事件,如:onclick事件,那么元素本身的觸發(fā)狀態(tài)就會傳遞,也就是冒到父元素,父元素的相同事件會一級一級根據(jù)嵌套關系向外觸發(fā),直到document/window,冒泡過程結束。

??事件代理:利用事件的冒泡原理來實現(xiàn)的。在捕獲階段中的實際應用:可以在父元素層面阻止事件向子元素傳播,也可代替子元素執(zhí)行某些操作。

二、事件委托

事件委托:就是利用冒泡階段的運行機制來實現(xiàn)的,就是把一個元素響應事件的函數(shù)委托到另一個元素上,一般是把一組元素的事件委托到他的父元素上。
即是指:不在事件的發(fā)生地(直接dom)上設置監(jiān)聽函數(shù),而是在其父元素上設置監(jiān)聽函數(shù),通過事件冒泡,父元素可以監(jiān)聽到子元素上事件的觸發(fā),通過判斷事件發(fā)生元素DOM的類型,來做出不同的響應。

eg:ul和li標簽的事件監(jiān)聽,比如我們在添加事件的時候,采用事件委托機制,不會在li標簽上直接添加,而是在ul父元素上添加。

事件委托的優(yōu)點是:
1.減少內存消耗,節(jié)約效率
2.適合動態(tài)元素的綁定事件,(新添加的元素也會有監(jiān)聽函數(shù),也可以有事件觸發(fā)機制)

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容