事件:事件流、事件对象、事件委托、如何先冒泡后捕获

事件

事件流

事件流描述的是页面接收事件的顺序(比如点击)

请添加图片描述

可以理解为向水底扔了石头,石头向下为捕获阶段,向上冒泡为冒泡阶段,同理鼠标点击后DOM先向下捕获这次点击事前,捕获后再向上冒泡,中间经过的对应事件处理函数都会被触发

  • 实际开发过程都用冒泡,即没有参数
  • 有些事件没有冒泡,如onblur,onfocus,onmouseenter,onmouseleave
  • 事件冒泡有时会带来麻烦,比如给son和father添加点击事件,点击son,会先弹出son,再弹出father,但我们只想弹出son;但是也有好处(事件委托),给father注册点击事件,然后利用target找到点击的son,再冒泡到ul上触发事件
事件对象

事件监听函数里自带的一个形参,可以自己命名,一般用e

div.onclick=function(e){
    //输出看看对象e的内容
    console.log(e);//有很多鼠标的相关信息
    //兼容IE
    e=e||window.event;
}

请添加图片描述

e.target与this的区别

e.target返回的是触发事件的对象(点击的对象)

this返回的是绑定事件的对象

阻止冒泡

e.stopPropagation() //stop停止Propagation传播

element.addEventListener(event, function, useCapture);

useCapture默认为false即冒泡,true时为捕获

事件委托(代理、委派)

拯救用for循环给元素绑定事件

这样可以只操作一次dom,提高程序性能

原理

不是给每个子节点单独设置监听器,而是事件监听器都设置在父节点上,然后利用冒泡影响设置每个子节点。

例子:给ul注册点击事件,然后利用事件对象的target来找到当前点击的li,因为点击li,事件会冒泡到ul上,ul有注册事件,就会触发事件监听器

请添加图片描述

如何先冒泡后捕获

在正常事件流中,都是先捕获后冒泡,这是不可更改的

我们只能给这个元素绑定两个事件监听addEventListener第一个参数设置为冒泡,第二个参数设置为捕获,以此达到先冒泡后捕获。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会飞的战斗鸡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值