美文网首页
(Web) 事件冒泡和事件捕捉

(Web) 事件冒泡和事件捕捉

作者: 布呐呐u | 来源:发表于2022-06-04 13:15 被阅读0次

当一个事件发生在具有父元素的元素上,现代浏览器会运行两个不同的阶段,捕获阶段冒泡阶段,二者是相反的流程。

  • 捕获阶段
  1. 浏览器检查元素的最外层祖先<html>,是否在捕获阶段中注册了某个事件处理程序,如果是,则运行它;
  2. 然后,它移动到<html>中单击元素的下一个祖先元素,并执行相同的操作,然后是单击元素再下一个祖先元素,依此类推,直到到达实际点击的元素。
  • 冒泡阶段
  1. 浏览器检查实际点击的元素是否在冒泡阶段中注册了某个事件处理程序,如果是,则运行它;
  2. 然后,它移动到下一个直接的祖先元素,并做同样的事情,然后是下一个,等等,直到它到达<html>元素。
  • 我们在事件对象上调用stopPropagation()函数,这样它就只会让当前事件处理程序运行,不会在冒泡链上进一步扩大,因此将不会有更多事件处理器被运行(不会向上冒泡)。
// 伪代码
video.onclick = function(event) {
  event.stopPropagation()
  video.play()
}

⚠️ 默认情况下,所有事件处理程序都是在冒泡阶段注册的,这在大多数情况下更有意义。如果您真的想在捕获阶段注册一个事件,那么您可以通过使用addEventListener()注册您的处理程序,并将可选的第三个属性设置为true。

  • 事件委托

冒泡还允许我们利用事件委托,如果你想要在大量子元素中单击任何一个都可以运行一段代码,您可以将事件监听器设置在其父节点上,并让子节点上发生的事件冒泡到父节点上,而不是每个子节点单独设置事件监听器。

一个很好的例子是一系列,列表项,如果你想让每个列表项被点击时弹出一条信息,您可以将click单击事件监听器设置在父元素<ul>上,这样事件就会从列表项冒泡到其父元素<ul>上。这个概念在 How JavaScript Event Delegation Works 文章中有更多的解释.

相关文章

  • (Web) 事件冒泡和事件捕捉

    当一个事件发生在具有父元素的元素上,现代浏览器会运行两个不同的阶段,捕获阶段和冒泡阶段,二者是相反的流程。 捕获阶...

  • JS事件冒泡和事件捕捉

    子标签和父标签都绑定事件,点击子标签,先触发子的绑定事件,再触发父的绑定事件,叫做事件冒泡。 反之,先触发父,后触...

  • DOM Event

    DOM Event 事件流 事件流分为三个阶段:事件捕捉,目标触发,事件冒泡 事件捕捉 注册事件类型发生后,从ht...

  • 事件冒泡(阻止冒泡)和事件捕捉(阻止捕获)

    很多朋友私聊问我怎么阻止事件冒泡,不懂事件冒泡和事件捕捉的童鞋看过来了,小编今天就来给大家讲解一下。 我们先来简单...

  • 事件冒泡(阻止冒泡)和事件捕捉(阻止捕获)

    原理 : DOM事件流(event flow ): 存在三个阶段:事件捕获阶段、处于目标阶段、事件冒泡阶段。 事件...

  • 02-12js应用

    一:车牌号限行案例 二:属性操作 三:BOM操作 四:计时事件 五:广告轮播案例 六:事件绑定 七:事件冒泡和事件捕捉

  • 事件冒泡及捕捉

    IE5.5 IE6.0 事件捕捉: IE使用冒泡型事件、相对的、Netscape使用了另一种称为捕获型事件(eve...

  • 事件绑定 和 方法传值

    冒泡和非冒泡事件绑定 bindtap: 冒泡事件绑定 catchtap: 非冒泡事件绑定当其他的事件冒泡到当前元素...

  • 微信小程序 WXML事件 WXML冒泡事件列表

    WXML事件分为 冒泡事件 和 非冒泡事件。 冒泡事件:当一个事件被触发后,该事件会向父节点传递。 非冒泡事件:不...

  • kbone 高级 - 事件系统

    1、用法 kbone 里节点事件没有直接复用小程序的捕获冒泡事件体系,原因在于: 小程序事件和 Web 事件不完全...

网友评论

      本文标题:(Web) 事件冒泡和事件捕捉

      本文链接:https://www.haomeiwen.com/subject/ofikmrtx.html