文章出處

  件冒泡和事件捕獲的demo了

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>無標題文檔</title>
<style>
.p{
    width:500px;
    height:500px;
    background:#CCF;
}
.s{
    width:300px;
    height:300px;
    background:#fff;
}
.min{
    width:100px;
    height:100px;
    background:#063;
}
</style>
</head>
<body>
<div class="p">
    <div class="s">
        <div class="min"></div>
    </div>
</div>
<script>
 window.alert = function (msg) {
    console.log(msg);
  };
  var p = document.getElementsByClassName('p')[0];
  var s = document.getElementsByClassName('s')[0];
  p.addEventListener('click', function (e) {
    alert( (e.target === e.currentTarget) + ' '+ e.eventPhase)
    alert('父節點捕獲11');
  }, true);
  p.addEventListener('click', function (e) {
    alert( (e.target === e.currentTarget) + ' '+ e.eventPhase)
    alert('父節點冒泡')
  }, false);
  
  s.addEventListener('click', function (e) {
    alert( (e.target === e.currentTarget) + ' '+ e.eventPhase)
    alert('子節點捕獲11');
  }, true);
  s.addEventListener('click', function (e) {
    alert( (e.target === e.currentTarget) + ' '+ e.eventPhase)
    alert('子節點冒泡')
  }, false);
  /*e.target時指向當前目標,e.currentTarget是指向點擊的this*/
</script>
</body>
</html>

   

  事件的eventPhase說明了事件執行所在狀態,  1為捕獲, 2為在目標上, 3為冒泡階段, 如果;

Event.CAPTURING_PHASE 1
Event.AT_TARGET 2
Event.BUBBLING_PHASE 3

 

  當我們點擊的是目標元素的時候, 捕獲的事件, 冒泡的事件和 正常綁定的事件都會觸發, 而且eventPhase的值為2, 

  當我們點擊的是目標元素內部元素時候,事件會根據捕獲,標準, 冒泡的順序執行  , 捕獲時eventPhase的值為1, 冒泡和標準時候eventPhase值為3;

  某些事件只捕獲, 沒有冒泡, 比如img的onload事件, 有些事件即冒泡又捕獲,比如click事件。 雖然說捕獲平常用不到, 但是也有存在的意義吧;

  

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body style="padding:100px">
    <div id="div0">div0</div>
    <div>
        body
    </div>
    <script>
        var l = function() {
            console.log( arguments[0] )
        };

        var div0 = document.getElementById("div0");
        div0.addEventListener("click", function(ev) {
            l(ev.eventPhase);
            l("div0點擊事件");
        });

        document.body.addEventListener("click", function(ev) {
            l(ev.eventPhase);
            l("在目標上");
        });

        document.body.onclick = function(ev) {
            l(ev.eventPhase);
            l("在目標上");
        }

        document.body.addEventListener("click", function(ev) {
            l(ev.eventPhase);
            l("冒泡");
        }, false);

        document.body.addEventListener("click", function(ev) {
            l(ev.eventPhase);
            l("捕獲");
        }, true);

    </script>
</body>
</html>

 

  


文章列表


不含病毒。www.avast.com
全站熱搜
創作者介紹
創作者 大師兄 的頭像
大師兄

IT工程師數位筆記本

大師兄 發表在 痞客邦 留言(0) 人氣()