AS3 事件流

很多人其实对AS3的事件流不太清楚 或者 自己清楚却讲不清楚 而这也是很多面试官喜欢问的问题

先简单举个例子 事件流机制就像我们开箱子找箱子里的苹果一样 事件流分为 捕获 目标 冒泡 三个阶段 , 捕获 就是 我们开箱子找苹果的那个阶段 ,目标 就是 苹果 ,冒泡阶段 就是从箱子里把手拿回来的过程 而这三个阶段都会遇到一些事件

首先我们看一张事件流的示意图

事件流

  1. 只要发生事件,Flash Player就会调度该事件对象。
  2. 如果事件目标不在显示列表中,则Flash Player将事件对象直接调度到事件目标。
  3. 如果事件目标在显示列表中,则Flash Player将事件对象调度到显示列表,然后该事件对象将在显示列表中进行一次从舞台到“目标节点”的往返行程。
  4. 事件流说明事件对象如何在显示列表中穿行,分为三部分:
    • 第一部分称为捕获阶段,该阶段包括从舞台到目标节点的父节点范围内的所有节点。
    • 第二部分称为目标阶段,该阶段仅包括目标节点。
    • 第三部分称为冒泡阶段,冒泡阶段包括从目标节点的父节点返回到舞台的行程中遇到的节点。  

其他

并所有事件对象都参与事件流的所有三个阶段。某些类型的事件(例如enterFrame和init类型的事件)会直接调度到目标节点,并不参与捕获阶段和冒泡阶段。其它事件可能以不在显示列表中的对象为目标,例如调度到Socket类的实例的事件。这些事件对象也将直接流至目标对象,而不参与捕获和冒泡阶段。

扩展理解

 在事件流中的每一层显示对象都能够采用addEventListener()方法监听该事件对象,但是考虑到addEventListener()方法的一个参数useCapture:Boolean(default = false),在默认情况下监听器只工作在目标阶段和冒泡阶段,而忽略捕获阶段。

原文地址:https://www.cnblogs.com/LLLoveLL/p/3860825.html