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

最近有用到对应的场景,上班了特地来整顿下响应的概念,坚固下常识。

咱们在点击页面时,事件产生时会在各元素节点依照肯定的程序进行流传,这种流传过程就称作事件流。

事件流分为三个阶段:

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 事件冒泡1test.html:29 btn 事件冒泡2test.html:34 container 事件冒泡test.html:15 body 事件冒泡

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