事件捕獲和事件冒泡理解


之前總是單純的記得事件冒泡和事件捕獲相反,一個從下至上,另一個從上至下,但是卻沒有弄明白他們的執行順序,導致昨晚筆試CVTE出了類似這么一道題不會做。

對於DOM和DOM2級事件這兩個區別就不詳細解釋了,網上大把資料。

這里僅針對該題目進行事件捕獲和事件冒泡順序進行理解。

首先要明白DOM2級事件規定的事件流包含3個階段,事件捕獲階段、處於目標階段、事件冒泡階段。

下面貼題目代碼(僅核心部分)進行詳細解釋,首先

addEventListener方法有三個參數,分別是事件監聽類型,事件執行函數和是否進行事件捕獲,默認值為false,即不進行事件捕獲(那自然就是事件冒泡了)。
問題來了,點擊a1元素,控制台如何輸出,我們來按照DOM2級事件規定的事件流進行分析一下即可得出答案
<body>
    <div id="dog">
      dog
      <div id="a1">
        a1
      </div>
    </div>
    <script>
      window.onload = function() {
        let dog = document.getElementById('dog')
        let a1 = document.getElementById('a1')
        a1.addEventListener('click', () => console.log('a1'), true)// a1新增一個事件捕獲
        a1.addEventListener('click', () => console.log('a1 12'), false)// a1新增一個事件冒泡
        dog.addEventListener('click', () => console.log('dog12'), false)// dog新增一個事件冒泡
        dog.addEventListener('click', () => console.log('dog'), true)// dog新增一個事件捕獲
      }
    </script>
 </body>

這里貼一下流程圖,大家肯定能理解了

沒錯,最后控制台輸出如下

先執行捕獲再執行冒泡


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM