天天看點

dom事件的機制-捕獲,目标,冒泡機制例子總結

機制

dom事件的機制-捕獲,目标,冒泡機制例子總結

IE10以下沒有捕獲階段

例子

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>事件機制</title>
</head>
<body >

    <div id="parent" style="height: 400px;width: 400px;background-color: cadetblue">
        <div id="child" style="height: 200px;width: 200px; margin:0 auto; background-color: bisque" onclick="console.log('捕獲之前 child self click')">
        </div>
    </div>
    <script>
        document.body.addEventListener("click",function () {
            console.log('捕獲 body click')
        },true);
        document.getElementById('parent').addEventListener("click",function () {
            console.log('捕獲 parent click')
        },true);
        document.getElementById('child').addEventListener("click",function () {
            console.log('捕獲 child click')
        },true);
        document.getElementById('parent').onclick =function(){
            console.log('捕獲之後 parent self click')
        }
        document.body.addEventListener("click",function () {
            console.log('冒泡 body click')
        },false);
        document.getElementById('parent').addEventListener("click",function () {
            console.log('冒泡 parent click')
        },false);
        document.getElementById('child').addEventListener("click",function () {
            console.log('冒泡 child click')
        },false);
        document.body.onclick =function(){
            console.log('冒泡之後 body self click')
        }
    </script>

</body>
</html>



                

點選child的列印效果

dom事件的機制-捕獲,目标,冒泡機制例子總結

解釋效果

事件捕獲是由外而内的,目标事件是在自身觸發的(目标事件過程,與事件聲綁定順序有關,先綁定先發生,它不遵守先捕獲後冒泡),事件冒泡是由内而外的。

關鍵點

  1. child,當事件從上至下捕獲的時候,到了child節點的時候,從開篇的圖中,應該是先執行捕獲,在執行目标,但是這裡是先執行了目标,在執行了捕獲,因為目标過程隻與綁定的先後順序有關,先綁定先執行。
  2. parent,當事件從下至上開始冒泡的時候,parent的目标在冒泡綁定之前,是以先執行。
  3. body,同理自然

總結

事件執行順序是從上至下,先執行捕獲事件,當執行到目标節點的時候,目标過程與綁定順序有關,繼而從下至上開始執行冒泡事件。

繼續閱讀