一。三个阶段:捕获(父->子),目标(触发事件流的对象),冒泡(子->父:具体的处理事件应该是在这个过程),所以如果父容器和子容器都有注册事件监听器,那么触发事件的书序应该显示子,后世父,因为在冒泡是触发的事件。前提是事件确实触发在子对象上,比如一个button上有个textfield,都注册了鼠标点击事件,如果点击了textfield,那么两个事件都会触发,不过textfield在前,button在后而已。(注:不是每个事件都有三个阶段,例如enterframe事件就没有,会直接调度到目标节点,并不参与捕获阶段和冒泡阶段)。

二。

if (event.eventPhase == EventPhase.AT_TARGET)
{
myFunc();
}

可以指定到底哪个阶段来具体触发函数。

currentTarget属性包含对当前正在处理事件对象的对象的引用。就是添加该事件侦听器的对象。

三。阻止冒泡:有时只想当前的对象响应事件,而显示对象列表的其他显示对象不响应事件,则需要阻止冒泡。

如果某对象的一个事件同时添加多个监听,stopPropagation将把该事件注册的所有监听处理函数执行完后,再阻止该事件继续向上冒泡;而 stopImmediatePropagation方法将本次处理函数执行完后就立即阻止事件继续向上冒泡(即同一事件的其它监听函数将不会执行,哪怕是同一个对象注册的多个相同的事件的响应器)。

四。取消默认行为:

许多事件都有默认执行的关联行为。例如,如果用户在文本字段中键入一个字符,则默认行为就是在文本字段中显示该字符。由于可以取消 TextEvent.TEXT_INPUT 事件的默认行为,因此您可以使用 preventDefault() 方法来防止显示该字符。

不可取消行为的一个示例是与 Event.REMOVED 事件关联的默认行为,只要 Flash Player 从显示列表中删除显示对象,就会生成该事件。由于无法取消默认行为(删除元素),因此 preventDefault() 方法对此默认行为无效。

您可以使用 Event.cancelable 属性来检查是否可以防止与特定事件关联的默认行为。如果 Event.cancelable 的值为 true,则可以使用 preventDefault() 来取消事件;否则,preventDefault() 无效。 

 

五。添加事件侦听器的参数(addEventListener):

1.useCapture 参数,可以控制侦听器将处于活动状态
的事件流阶段。如果 useCapture 设置为 true,侦听器将在事件流的捕获阶段成为活动状
态。如果 useCapture 设置为 false,侦听器将在事件流的目标阶段和冒泡阶段处于活动状
态。要在事件流的所有阶段侦听某一事件,您必须调用 addEventListener() 两次,第一次
调用时将 useCapture 设置为 true,第二次调用时将 useCapture 设置为 false。

2.可以使用 useWeakReference 参数来指定对侦听器函数的引用是弱引用还是正常引用。通过
将此参数设置为 true,可避免侦听器函数在不再需要时仍然存在于内存中的情况。Flash
Player 使用一项称为“垃圾回收”的技术从内存中清除不再使用的对象。如果不存在对某个
对象的引用,则该对象被视为不再使用。垃圾回收器不考虑弱引用,这意味着如果侦听器函
数仅具有指向它的弱引用,则符合垃圾回收条件。

 

六。实现IEventDispatcher接口,可以自定义事件。

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐