事件冒泡与事件捕获详解

事件流

概念

首先,我们来了解一下什么是事件流。

事件流:当事件发生时,会在发生事件的元素节点与DOM树根节点之间按照特定的顺序进行传播, 这个过程称之为事件流。

(当页面触发一个事件时,会按照一定的顺序来响应事件,事件的响应过程称为事件流。)

分类

事件流可分为冒泡型事件流、捕获型事件流。

(1)事件冒泡:微软公司提出的,事件由子元素传递到父元素的过程叫做冒泡(false)。

查找事件(事件响应)的顺序:文本节点–>元素节点—>body—>html—>document(例如点击事件)<向上响应>

(2)捕获事件:网景公司提出的,事件由父元素传递到子元素的过程叫做事件捕获。(ture)

查找事件(事件响应)的顺序:document–>html–>body–>元素节点–>文本节点 <向下响应>

应用

在使用"事件监听"的方式绑定事件时,可以设置事件的响应方式。

DOM对象.addEventListener(事件,事件处理程序,事件冒泡方式)

事件冒泡方式:

(1)默认为false,表示冒泡阶段完成事件处理

(2)true捕获阶段完成事件处理

例如:

<div class="father">father
        <div class="son">son</div>
    </div>

    <script>
        father=document.querySelector('.father')
        son=document.querySelector('.son')
        father.addEventListener('click',function(){
            alert('father')
        })
        
        son.addEventListener('click',function(){
            alert('son')
        })   //事件冒泡
    </script>

事件冒泡方式:son——>father——>body——>html——>document
son绑定的点击事件,没有设置事件流方式,默认的事件流类型为false(事件冒泡),当点击son盒子的时候,事件流向上冒泡,首先弹出son消息框,再弹出father消息框。

在这里插入图片描述
在这里插入图片描述

阻止事件冒泡的方式

常用方法:

(1)事件委托:将元素的绑定事件写起其父元素上,防止事件冒泡

(2)event.stopPropagation():可以阻止事件冒泡,阻止父级元素的绑定事件

son.addEventListener('click',function(e){
    alert('son')
    e.stopPropagation();   //阻止事件冒泡
}) 

上面的例子中,加上e.stopPropagation()这句话,当点击son元素时,只会弹出son的弹窗,不加上这句话,点击son元素,会先弹出son,再弹出father。

  • 18
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值