对Flex事件原理的理解

1.事件流
“事件流”说明事件对象如何在显示列表中穿行。显示列表以一种可以描述为树的层次
结构形式进行组织。位于显示列表层次结构顶部的是舞台,它是一种特殊的显示对象容器,
用作显示列表的根。舞台由 flash.display.Stage 类表示,且只能通过显示对象访问。每个显示对象都有一个名为 stage 的属性,该属性表示应用程序的舞台。
从概念上来说,事件流分为三部分。第一部分称为捕获阶段,该阶段包括从舞台到目标
节点的父节点范围内的所有节点。第二部分称为目标阶段,该阶段仅包括目标节点。第三部
分称为冒泡阶段。冒泡阶段包括从目标节点的父节点返回到舞台的行程中遇到的节点。


2.事件流信息
其余 Event 类属性包含有关事件对象及其与事件流的关系的重要信息,如以下列表所述:
bubbles 属性包含有关事件流中事件对象参与的部分的信息。
eventPhase 属性指示事件流中的当前阶段。
target 属性存储对事件目标的引用。
currentTarget 属性存储对当前正在处理事件对象的显示列表对象的引用。


3.停止事件流
可以调用 Event.stopPropogation() 方法或 Event.stopImmediatePropogation() 方法来阻
止在事件流中继续执行事件对象。这两种方法几乎相同,只有在是否允许执行当前节点的其
它事件侦听器方面不同:
Event.stopPropogation() 方法可阻止事件对象移动到下一个节点,但只有在允许执行当前节点上的任何其它事件侦听器之后才起作用。
Event.stopImmediatePropogation() 方法也阻止事件对象移动到下一个节点,但不允许执行当前节点上的任何其它事件侦听器。
调用其中任何一个方法对是否发生与事件关联的默认行为没有影响。使用 Event 类的默认
行为方法可以阻止默认行为。


4.取消默认事件行为
与取消默认行为有关的两个方法是 preventDefault() 方法和 isDefaultPrevented() 方法。调用 preventDefault() 方法可取消与事件关联的默认行为。要查看是否已针对事件对象调用了 preventDefault(),请调用 isDefaultPrevented() 方法,如果已经调用,该方法将返回值 true,否则返回值 false。
仅当可以取消事件的默认行为时,preventDefault() 方法才起作用。可通过检查事件对象的cancelable 属性来确定是否属于这种情况。取消默认行为对事件对象通过事件流的进度没有影响。使用 Event 类的事件流方法可以从事件流中删除事件对象。


5.调度事件
高级程序员可以使用 dispatchEvent() 方法将自定义事件对象调度到事件流。该方法唯
一接受的参数是对事件对象的引用,此事件对象必须是 Event 类的实例或子类。调度后,
事件对象的 target 属性将设置为对其调用了 dispatchEvent() 的对象。


6.检查现有的事件侦听器
IEventDispatcher 接口的最后两个方法提供有关是否存在事件侦听器的有用信息。如果
在特定显示列表对象上发现特定事件类型的事件侦听器, hasEventListener() 方法将返回true。如果发现特定显示列表对象的侦听器,willTrigger() 方法也会返回 true。但 willTrigger()不但检查该显示对象上的侦听器,还会检查该显示列表对象在事件流所有阶段中的所有父级上的侦听器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值