共计 1513 个字符,预计需要花费 4 分钟才能阅读完成。
事件流、事件捕捉和事件冒泡的介绍
最近有用到对应的场景,上班了特地来整顿下响应的概念,坚固下常识。
咱们在点击页面时,事件产生时会在各元素节点依照肯定的程序进行流传,这种流传过程就称作事件流。
事件流分为三个阶段:
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(上)。有个例子就讲的挺有形象,就好比一个塑料扔到水里,先往下沉(捕捉阶段),沉到最底部(指标阶段)再缓缓浮起来(冒泡阶段)。
正文完
发表至: javascript
2022-02-18