事件对象在ActionScript 3.0的事件处理系统中主要有两个用途。这两个用途如下。
(1)事件对象通过一组属性保存指定事件的信息。
(2)事件对象包含一组方法,开发人员可以通过事件对象中的方法来操作事件对象,并且可以影响事件处理系统的行为。
为了能够方便的访问这些属性和方法,FlashPlayer API中提供了一个Event类作为基类,为所有的组件对象服务。Event类中定义了一些基础的属性和方法作为公共属性和方法,然后被所有的事件对象继承。
Event类中的属性功能是保存着事件对象的相关信息。表4.8中对这些关键属性进行了简单的介绍。
表 Event对象类中基础属性介绍
属性名称 |
说明 |
type |
type属性保存着事件对象的类型的信息。 |
cancelable |
cancelable属性保存着事件的默认方法是否被阻止使用的信息。cancelable的值是boolean类型的。 |
bubbles |
bubbles属性保存着事件对象参与到事件流的信息。此属性的值是boolean类型。如果值为true,说明此事件对象参与了事件流中的三个阶段;如果值为false,说明此对象没有参与bubbling phase(起泡阶段)。 |
eventPhase |
eventPhase属性保存着事件对象在事件流中所处的阶段信息。此属性的值为uint(不带符号的整数类型)。在Flash Player API中定义了一个单独的EventPhase类,在这个类中包含着三个静态的常量,类型为uint。 |
target |
target属性保存着目标事件对象的引用。 |
currentTarget |
currentTarget属性保存着Displayer List(显示架构)对象中正在被处理的事件对象的引用。 |
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=1;
//起泡阶段
}
}
基于以上代码,可以通过事件对象的eventPhase属性来判断事件对象处在事件流中的哪个阶段如下代码中。
If(my_event.eventPhase==EventPhase.CAPTURING_PHASE)
{
myFunction();//当事件对象my_event处在事件流的获取阶段的时候便指定myFunction()处理
}
Event类中有三种类型的方法:实用方法、影响事件流的方法、影响默认行为方法。表中对这些关键方法进行了简单的介绍。
表 Event对象类中方法介绍
方法名称 |
所属类型 |
说明 |
clone() |
实用方法 |
复制事件对象的一个副本。 |
toString() |
实用方法 |
以字符串的形式一起表现事件对象的属性和值 |
stopPropagation() |
影响事件流的方法 |
阻止事件对象移动到下个结点,但仅仅是在其他事件监听在此结点执行后。 |
stopImmediatePropagation() |
影响事件流的方法 |
阻止事件对象移动到下个结点,但是不允许其他事件监听在当前结点执行。 |
preventDefault() |
影响默认行为方法 |
调用此方法,取消与事件关联的默认行为方法,此方法必须在确保此事件对象的默认行为方法可以被取消的情况下工作。 |
isPreventDefault() |
影响默认行为的方法 |
此方法用于检查preventDefault()方法是否被调用,此方法的返回值为true或者是false。 |
所有的事件都继承自Event Calss。对于大多数的事件,事件类已经定义了足够用的属性来支持这些事件。对于一些特殊的事件,它们拥有着自身特殊的属性,而这些属性不能通过事件类提供的基本属性来获取到。对于这些类,Flash Player API定义了几个继承至事件类的子类。
这些特殊的事件类继承了事件类所有的属性,并附加了自己特有的一些属性和事件类型。例如,与鼠标输入相关的事件拥有着自己特殊的属性。这些特有的属性不能通过其继承的父类事件类定义的公共属性来捕获。
事件类型的子类还可以包含常量。这些常量表现了与其关联事件的事件类型。例如,鼠标事件类包含了几个事件类型,click(单击)、doubleClick(双击)、mouseDown(鼠标按下)、mouseUp(鼠标擡起)等事件类型。