DOM事件流描述的是從頁面中接收事件的順序;事件發生時會在元素節點之間按照特定的順序傳播,這個傳播過程即 DOM 事件流!javascript
好比咱們給一個div註冊了一個點擊事件:html
DOM事件流分爲3個階段:java
事件冒泡: IE 最先提出,事件開始時由最具體的元素接收,而後逐級向上傳播到到 DOM 最頂層節點的過程。性能
事件捕獲: 網景最先提出,由 DOM 最頂層節點開始,而後逐級向下傳播到到最具體的元素接收的過程。spa
須要注意:代理
<body>
<div class="father">
<div class="son">son盒子</div>
</div>
<script>
// 冒泡階段:若是addEventListener第三個參數是 false 或者省略那麼則處於冒泡階段 son -> father ->body -> html -> document
var son = document.querySelector('.son');
son.addEventListener('click', function() {
alert('son');
}, false);
var father = document.querySelector('.father');
father.addEventListener('click', function() {
alert('father');
}, false);
document.addEventListener('click', function() {
alert('document');
})
</script>
</body>
複製代碼
代碼執行結果:code
標準寫法:利用事件對象裏面的 stopPropagation()方法cdn
e.stopPropagation()
htm
非標準寫法:IE 6-8 利用事件對象 cancelBubble 屬性對象
e.cancelBubble = true
<body>
<ul>
<li>
<div>事件委託</div>
</li>
</ul>
<script>
var ul = document.querySelector('ul');
ul.addEventListener('click', function(e) {
// e.target 這個能夠獲得咱們點擊的對象
e.target.style.backgroundColor = 'purple';
})
</script>
</body>
複製代碼