Event 类定义许多只读属性和常量,以提供有关事件对象的重要信息。以下内容尤其重要:
事件对象类型
每个事件对象都有关联的事件类型。数据类型以字符串值的形式存储在
Event.type
属性中。知道事件对象的类型是非常有用的,这样您的代码就可以区分不同类型的对象。例如,下面的代码指定
clickHandler()
侦听器函数应响应传递给
myDisplayObject
的任何鼠标单击事件对象。
myDisplayObject.addEventListener(MouseEvent.CLICK, clickHandler);
大约有 20 多种事件类型与 Event 类自身关联并由 Event 类常量表示,其中某些数据类型显示在摘自 Event 类定义的以下代码中:
package flash.events
{
public class Event
{
// class constants
public static const ACTIVATE:String = "activate";
public static const ADDED:String= "added";
// remaining constants omitted for brevity
}
}
这些常量提供了引用特定事件类型的简便方法。您应使用这些常量而不是它们所代表的字符串。如果您的代码中拼错了某个常量名称,编译器将捕获到该错误,但如果您改为使用字符串,则编译时可能不会出现拼写错误,这可能导致难以调试的意外行为。例如,添加事件侦听器时,使用以下代码:
myDisplayObject.addEventListener(MouseEvent.CLICK, clickHandler);
而不是使用:
myDisplayObject.addEventListener("click", clickHandler);
默认行为信息
代码可通过访问
cancelable
属性来检查是否可以阻止任何给定事件对象的默认行为。
cancelable
属性包含一个布尔值,用于指示是否可以阻止默认行为。您可以使用
preventDefault()
方法阻止或取消与少量事件关联的默认行为。有关详细信息,请参阅
了解 Event 类的方法
下的“取消默认事件行为”。
事件流信息
其余 Event 类属性包含有关事件对象及其与事件流的关系的重要信息,如以下列表所述:
-
bubbles
属性包含有关事件流中事件对象参与的部分的信息。
-
eventPhase
属性指示事件流中的当前阶段。
-
target
属性存储对事件目标的引用。
-
currentTarget
属性存储对当前正在处理事件对象的显示列表对象的引用。
bubbles 属性
如果事件对象参与事件流的冒泡阶段,则将该事件称为“冒泡”,这指的是从目标节点将事件对象往回传递,经过目标节点的父节点,直到到达舞台。
Event.bubbles
属性存储一个布尔值,用于指示事件对象是否参与冒泡阶段。由于冒泡的所有事件还参与捕获和目标阶段,因此这些事件参与事件流的所有三个阶段。如果值为
true
,则事件对象参与所有三个阶段。如果值为
false
,则事件对象不参与冒泡阶段。
eventPhase 属性
您可以通过调查任何事件对象的
eventPhase
属性来确定事件阶段。
eventPhase
属性包含一个无符号整数值,该值代表三个事件流阶段中的一个阶段。Flash Player API 定义了单独的 EventPhase 类,该类包含三个对应于三个无符号整数值的常量,如以下摘录代码中所示:
package flash.events
{
public final class EventPhase
{
public static const CAPTURING_PHASE:uint = 1;
public static const AT_TARGET:uint = 2;
public static const BUBBLING_PHASE:uint= 3;
}
}
这些常量对应于
eventPhase
属性的三个有效值。使用这些常量可以使您的代码可读性更好。例如,如果要确保仅当事件目标在目标阶段中时才调用名为
myFunc()
的函数,您可以使用以下代码来测试此条件:
if (event.eventPhase == EventPhase.AT_TARGET)
{
myFunc();
}
target 属性
target
属性包含对作为事件目标的对象的引用。在某些情况下,这很简单,例如当麦克风变为活动状态时,事件对象的目标是 Microphone 对象。但是,如果目标在显示列表中,就必须考虑显示列表层次。例如,如果用户在包括重叠的显示列表对象的某一点输入一个鼠标单击,则 Flash Player 和 AIR 始终会选择距离舞台层次最深的对象作为事件目标。
对于复杂的 SWF 文件,特别是那些通常使用更小的子对象来修饰按钮的 SWF 文件,
target
属性可能并不常用,因为它通常指向按钮的子对象,而不是按钮。在这些情况下,常见的做法是将事件侦听器添加到按钮并使用
currentTarget
属性,因为该属性指向按钮,而
target
属性可能指向按钮的子对象。
currentTarget 属性
currentTarget
属性包含对当前正在处理事件对象的对象的引用。您并不知道哪个节点当前正在处理您要检查的事件对象,虽然这似乎很奇怪,但请记住,您可以向该事件对象的事件流中的任何显示对象添加侦听器函数,并且可以将侦听器函数放在任何位置。而且,可以将相同的侦听器函数添加到不同的显示对象。随着项目大小和复杂性的增加,
currentTarget
属性会变得越来越有用。