从事件冒泡流和捕获流,到理解事件委派和阻止事件冒泡

之前对于事件冒泡流和捕获流的理解只停留在了大概了解的程度,只知道什么时候该用事件委派和阻止事件冒泡,而没有理解背后的原理,直到用代码看到dom事件流的过程,才理解这两个操作的意义。

三种事件流:
事件冒泡流:ie
事件捕获流:netscape
dom事件流:捕获阶段、处于目标阶段、冒泡阶段

捕获阶段:事件从根节点流向目标节点,触发沿途各节点上的捕获事件,最终到达目标节点。作用是建立传播路经,在冒泡阶段根据这个路经回溯到文档根节点。

目标阶段:事件到达目标节点时,进入目标阶段,事件在目标节点上被触发。

冒泡阶段:事件在目标节点上触发后,不会终止,一层层向上冒,回溯到根节点。

下面用一段代码模拟dom事件流的过程

<div class="a">
    <li class="b">
      <a href="#" class="c">点击</a>
    </li>
</div>

<script>
    var div = document.getElementsByClassName('a')[0];
    var li = document.getElementsByClassName('b')[0];
    var a = document.getElementsByClassName('c')[0];

    //第三个参数默认是false,默认为冒泡阶段处理
    div.addEventListener('click',function(event){
    console.log('冒泡阶段div');
    });
    li.addEventListener('click',function(event){
    console.log('冒泡阶段li');
    });
    a.addEventListener('click',function(event){
    console.log('冒泡阶段a');
    });

    //第三个参数设为true,事件捕获阶段处理
    div.addEventListener('click',function(event){
    console.log('捕获阶段div');
    },true);
    li.addEventListener('click',function(event){
    console.log('捕获阶段li');
    },true);
    a.addEventListener('click',function(event){
    console.log('捕获阶段a');
    },true);
</script>

运行结果为:
捕获阶段div
捕获阶段li
冒泡阶段a
捕获阶段a
冒泡阶段li
冒泡阶段div

由此引出了事件委派和阻止事件冒泡这两个操作

事件委派:只需把事件处理器添加到父元素上,便可以以通过事件捕获流让子元素可以触发事件。

阻止事件冒泡:防止在点击子元素时,由于事件冒泡流而触发父元素上的点击事件。将添加代码 event.stopPropagation(); 或者将addEventListener()第三个参数设置为true,可阻止事件冒泡。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值