ES12 中的新特性:增加了 DOM addEventListener 的捕获默认模式

阅读时长 3 分钟读完

在前端开发中,DOM addEventListener 是一个非常常用的方法,它可以用来监听一个元素上的事件并执行对应的处理函数。在事件流中,事件的传递顺序分为冒泡和捕获两种模式。而在 ES12 中,为 DOM addEventListener 增加了一个新的捕获默认模式,使得开发人员在处理事件时更加灵活方便。

捕获默认模式

在过去的 DOM 事件流中,有两种传播方式,即冒泡和捕获,它们的执行顺序分别是从目标元素向上依次递归触发事件处理程序,或从文档根节点到目标元素逐层执行事件处理程序。而ES12为 addEventListener 方法增加了一个新的 capture 参数,允许开发人员直接在捕获阶段处理事件。

增加 capture

在原有的 addEventListener 方法中,我们可以监听元素上的事件,并通过 useCapture 参数来选择一开始是以冒泡还是捕获的方式执行事件处理程序,如下所示:

但这个 useCapture 参数在现有场景下并不太好用,因为它只是决定了事件监听的传播方式,并不能直接在捕获阶段执行事件处理程序。所以,ES12 新增加了一个新的 capture 参数,允许开发人员直接指定事件监听在捕获阶段是否执行。

capture 为 true 时,事件在捕获阶段处理,否则在冒泡阶段处理。

示例代码

-- -------------------- ---- -------
----- ----- - --------------------------------
----- ----- - --------------------------------

------------------------------- ----------------- - -------- ---- --
------------------------------- ----------------- - -------- ---- --

-------- ----------------------- -
  ------------------ -------
-

-------- ----------------------- -
  ------------------ -------
-

在上面的例子中,当我们点击 inner 元素时,捕获模式下先执行 handleOuterClick,后执行 handleInnerClick;在冒泡模式下,则先执行 handleInnerClick,后执行 handleOuterClick

总结

ES12 新增加的捕获默认模式为我们提供了更加灵活、方便的事件监听方式,在某些场景下可以大大简化代码的复杂度。当然,在实际开发过程中,还需要结合具体情况来选择合适的事件监听方式。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64c984285ad90b6d04173bdd

纠错
反馈