理解捕獲,目標,冒泡三個階段


1.事件的三個階段


  1. 捕獲
  2. 目標
  3. 冒泡

捕獲(IE8及以下版本不支持),目標,冒泡 捕獲階段給事件截獲提供了可行性。

 

2.冒泡階段觸發事件


<body style="height:500px">

<div id="all">
    <div>div1</div>
    <div>div2</div>
</div>

<script> document.getElementsByTagName('body')[0].addEventListener('click', function(e) { alert(1); }, false); document.getElementById('all').addEventListener('click', function(e) { alert(2); }, false); </script>

點擊body區域:alert(1)

點擊all區域:alert(2) alert(1)

 

3.捕獲階段觸發事件

<body style="height:500px">

<div id="all">
    <div>div1</div>
    <div>div2</div>
</div>

<script>

    //將這里的false,改成true.表明body的綁定事件發生在捕獲階段
    document.getElementsByTagName('body')[0].addEventListener('click', function(e) { alert(1); }, true); document.getElementById('all').addEventListener('click', function(e) { alert(2); }, false); </script>

 

4.看圖說話


 

 

當點擊目標元素的時候都是這三步,唯一的區別是你控制事件觸發在哪個階段

所以我們可以看到要想截獲事件必須要在目標元素事件發生之前,也就是捕獲階段。

 

5.冒泡與捕獲的相對性


看了什么捕獲,冒泡的時機問題。肯定有熊孩子會這么寫:

寫個例子:

 

<!DOCTYPE html>
<html>
<head>
    <title>demo</title>
</head>
<body>

<a id="A">元素A</a>



</body>
<script type="text/javascript">
    
var domA = document.getElementById('A'); //冒泡
domA.addEventListener('click',function () { alert('A') },false) //捕獲
domA.addEventListener('click',function () { alert('B') },true) </script>
</html>

 

在同一個元素上綁定事件,看看哪個先彈出來(好想法!!!!)。

結果依舊是:A,B。

捕獲與冒泡不是相對與該元素的,而是相對於父級元素或子級元素的

這里可能又會冒出這樣的想法:那么捕獲與冒泡是相對是其他級的元素,那會冒泡到相鄰兄弟元素么?

答案是不會。

我在這里測試過:冒泡,setinterval,背景圖的div綁定事件,匿名函數問題

 


免責聲明!

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



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