事件流、事件捕获和事件冒泡的介绍

简介: 事件流、事件捕获和事件冒泡的介绍

事件流、事件捕获和事件冒泡的介绍

最近有用到对应的场景,下班了特地来整理下响应的概念,巩固下知识。

我们在点击页面时,事件发生时会在各元素节点按照一定的顺序进行传播,这种传播过程就称作事件流。

事件流分为三个阶段:

1、事件捕获阶段

事件从window发出,不断向子元素寻找对应的目标节点

2、事件目标阶段

事件找到了对应的目标节点,即此时再往下已经没有对应的节点

3、事件冒泡阶段

事件从节点位置网上回溯到文档的根节点

我们在使用给dom添加事件时一般使用addEventListener方法,该方法传入三个参数

1、对应的事件名称如:click

2、函数:触发对应的交互响应后执行的函数

3、userCapture:指定事件是在捕获还是冒泡阶段执行,默认false。(或者传入一个options选项,但是今天不讲这个)

语法:

target.addEventListener(type, listener, useCapture);

示例

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
 <title>Title</title>
</head>
<body>
  <div id="container">
  <button id="btn">DOM事件流</button>
 </div>
  <script>
  document.body.addEventListener("click", function (event) {
   console.log("body 事件冒泡");
  }, false);
  document.body.addEventListener("click", function (event) {
   console.log("body 事件捕获");
  }, true);
  var btn = document.getElementById("btn");
  btn.addEventListener("click", function (event) {
   console.log("btn 事件冒泡1");
  }, false);
  btn.addEventListener("click", function (event) {
   console.log("btn 事件捕获");
  }, true);
  btn.addEventListener("click", function (event) {
   console.log("btn 事件冒泡2");
  }, false);
  var container = document.getElementById("container");
  container.addEventListener("click", function (event) {
   console.log("container 事件冒泡");
  }, false);
  container.addEventListener("click", function (event) {
   console.log("container 事件捕获");
  }, true);
 </script>
</body>
</html>
// 对应的打印结果
body 事件捕获
test.html:37 container 事件捕获
test.html:26 btn 事件捕获
test.html:23 btn 事件冒泡1
test.html:29 btn 事件冒泡2
test.html:34 container 事件冒泡
test.html:15 body 事件冒泡

可以看到,都是先触发捕获再触发冒泡事件,先从body(上)到btn(下),再从btn(下)到body(上)。有个例子就讲的挺有形象,就好比一个塑料扔到水里,先往下沉(捕获阶段),沉到最底部(目标阶段)再慢慢浮起来(冒泡阶段)。

相关文章
|
7月前
事件代理和事件委托
事件代理和事件委托
57 6
|
7月前
什么是事件代理?什么事件委托?
什么是事件代理?什么事件委托?
49 0
|
1月前
|
JavaScript 前端开发 UED
事件冒泡
【10月更文挑战第29天】事件冒泡是 JavaScript 中一种强大的事件传播机制,理解和正确使用事件冒泡可以帮助开发者实现更加高效、灵活的网页交互效果。在实际开发中,需要根据具体的需求和场景,合理地利用事件冒泡,并注意处理可能出现的事件冲突和兼容性问题。
|
1月前
|
JavaScript 前端开发 数据安全/隐私保护
事件捕获
【10月更文挑战第29天】事件捕获作为JavaScript中重要的事件传播机制之一,为开发者提供了一种在事件到达目标元素之前进行处理和控制的方式。通过合理地运用事件捕获,可以实现更灵活、更强大的事件处理逻辑,但同时也需要注意其兼容性、事件顺序和性能等方面的问题,以确保事件处理的正确性和高效性。
|
2月前
|
JavaScript 前端开发
事件冒泡和事件捕获的原理和区别
【10月更文挑战第15天】事件冒泡和事件捕获的原理和区别
|
3月前
|
JavaScript 前端开发 API
你真的理解事件绑定、事件冒泡和事件委托吗?
该文章详细解释了JavaScript中的事件绑定机制、事件冒泡行为以及事件委托技术,并通过实例帮助读者更好地理解和应用这些概念。
|
3月前
|
存储 JavaScript 前端开发
js事件冒泡和事件委托
事件冒泡是指事件从最内层元素开始逐级向上传播至祖先元素的过程,默认情况下,点击子元素时会先触发自身的事件处理程序,再依次向上触发父元素的处理程序。事件委托则是在父元素上设置事件处理程序,利用事件冒泡机制处理子元素的事件,以此减少内存消耗和提高性能,特别适用于处理大量动态子元素的情况。其区别在于事件冒泡是事件传播机制的一部分,而事件委托是编程技巧,通过在父元素上绑定事件处理程序来简化子元素的事件处理。
28 0
|
5月前
|
JavaScript
js 事件流、事件冒泡、事件捕获、阻止事件的传播
js 事件流、事件冒泡、事件捕获、阻止事件的传播
81 1
|
7月前
|
JavaScript
|
7月前
|
JavaScript 前端开发
什么是事件代理?什么是事件委托?
什么是事件代理?什么是事件委托?
81 6