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>
复制代码