事件派发和事件流

事件流基本流程:

1.确定事件对象传播路径,传播路径propagation path 是事件流过(通过)形成的当前事件目标( current event targets)组成的有序列表。

2. 捕获阶段:事件对象从window(文档根节点,有可能是document,浏览器有区别)传播到目标节点的直接父结点为止。

3.目标阶段:事件对象到达事件目标节点

4.冒泡阶段:从目标的父节点传播到根节点

下面从官网蹩脚翻译内容:

事件派发和DOM事件流

应用程序可以使用 dispatchEvent()方法派发事件对象,事件对象将通过由DOM事件流确定的DOM树进行传播。

 

 

      使用DOM事件流在DOM树中的一个事件派发图示

事件对象派发到一个事件目标上 event target.但是在派发开始之前,必须先确定事件对象的传播路径propagation path。.

传播路径propagation path 是事件流过(通过)形成的当前事件目标( current event targets)的有序列表。  该传播路径反映文档的分层树结构。列表中的最后一项是事件目标 event target, 且列表中前面的项被称为目标的祖先target’s ancestors,其中直接地前项作为目标父级 target’s parent.

一旦确定了传播路径 propagation path, 事件对象就会经过一个或多个事件阶段 event phases. 三个事件阶段: 捕获阶段capture phase,目标阶段 target phase 和冒泡阶段bubble phase. 事件对象如下所述完成些阶段。如果不支持该阶段,或事件对象的传播被停止,则该阶段将被跳过.例如,如果 bubbles属性 被设置为false,则跳过冒泡阶段,如果在派发之前调用了stopPropagation(),则所有阶段被跳过。.

  • 捕获阶段capture phase: 事件对象通过目标的祖先节点从Window传播到目标的父级(节点) 。这个阶段被称为捕获阶段.
  • 目标阶段 target phase: 事件对象到达事件对象的事件目标 event target.这个阶段被称为“在目标阶段” at-target phase. 如果事件类型 event type 指定事件不冒泡,那么事件对象将在此阶段完成后停止。
  • 冒泡阶段bubble phase: 事件对象以相反的顺序通过目标的祖先传播,从目标的父项开始,以Window结束。这个阶段被称为冒泡阶段。

参考:https://www.w3.org/TR/DOM-Level-3-Events/#event-flow

猜你喜欢

转载自www.cnblogs.com/xiaozhuyuan/p/8906237.html