事件处理基础知识

Flash Player 9 和更高版本,Adobe AIR 1.0 和更高版本

您可以将事件视为 SWF 文件中发生的程序员感兴趣的任何类型的事件。例如,大多数 SWF 文件都支持某些类型的用户交互,无论是像响应鼠标单击这样简单的用户交互,还是像接受和处理表单中输入的数据这样复杂的用户交互。与 SWF 文件进行的任何此类用户交互都可以视为事件。也可能会在没有任何直接用户交互的情况下发生事件,例如,从服务器加载完数据或者连接的摄像头变为活动状态时。

在 ActionScript 3.0 中,每个事件都由一个事件对象表示。事件对象是 Event 类或其某个子类的实例。事件对象不但存储有关特定事件的信息,还包含便于操作此事件对象的方法。例如,当 Flash Player 或 AIR 检测到鼠标单击时,它会创建一个事件对象(MouseEvent 类的实例)以表示该特定鼠标单击事件。

创建事件对象之后,Flash Player 或 AIR 即“调度”该事件对象,这意味着将该事件对象传递给作为事件目标的对象。作为被调度事件对象的目标的对象称为“事件目标”。例如,当连接的摄像头变为活动状态时,Flash Player 会向事件目标直接调度一个事件对象,此时,该事件对象就是代表摄像头的对象。但是,如果事件目标位于显示列表中,则事件对象会沿显示列表层次向下传递,直到到达事件目标为止。在某些情况下,事件对象随后会沿着相同路线在显示列表层次中向上“冒泡”回去。这种在显示列表层次中遍历的活动称为事件流

您可以使用事件侦听器“侦听”代码中的事件对象。“事件侦听器”是您编写的用于响应特定事件的函数或方法。若要确保您的程序响应事件,必须将事件侦听器添加到事件目标,或添加到作为事件对象事件流的一部分的任何显示列表对象。

无论何时编写事件侦听器代码,该代码都会采用以下基本结构(以粗体显示的元素是占位符,您将针对具体情况对其进行填写):

function eventResponse(eventObject:EventType):void 
{ 
    // Actions performed in response to the event go here. 
} 
 
eventTarget.addEventListener(EventType.EVENT_NAME, eventResponse);

此代码完成两项任务。首先,它定义一个函数,这是指定为响应事件而执行的动作的方法。接下来,调用源对象的 addEventListener() 方法,实际上就是为指定事件“订阅”该函数,以便当该事件发生时,执行该函数的操作。当事件实际发生时,事件目标将检查其注册为事件侦听器的所有函数和方法的列表。然后,它依次调用每个函数或方法,同时将事件对象作为参数传递。

您需要在此代码中更改四项内容以创建自己的事件侦听器。第一,必须将函数名称更改为要使用的名称(必须在两个位置更改此内容,代码将在此处显示 eventResponse)。第二,必须为要侦听的事件(代码中的 EventType)所调度的事件对象指定相应的类名称,并且必须为特定事件(列表中的 EVENT_NAME)指定相应的常量。第三,必须针对调度事件(此代码中的 eventTarget)的对象调用 addEventListener() 方法。您可以选择更改用作函数参数(此代码中的 eventObject)的变量的名称。

重要概念和术语

以下参考列表包括您在编写事件处理例程时会遇到的重要术语。

冒泡
一些事件会发生冒泡,以使父显示对象可以响应其子项调度的事件。

冒泡阶段
事件流中向上传播到父显示对象的事件所在部分。冒泡阶段发生在捕获和目标阶段之后。

捕获阶段
事件流中从最常规的目标向下传播到最具体的目标对象的事件所在部分。捕获阶段发生在目标和冒泡阶段之前。

默认行为
某些事件包含通常与事件同时发生的行为,称为默认行为。例如,当用户在文本字段中键入文本时,将引发文本输入事件。该事件的默认行为是实际显示在文本字段中键入的字符,但您可以覆盖该默认行为(如果由于某种原因,您不希望显示键入的字符)。

调度
通知事件侦听器发生了某事件。

事件
在某对象上发生的情况,该对象可以将此情况告知其他对象。

事件流
当显示列表上的对象(屏幕上显示的对象)发生事件时,将通知包括该对象在内的所有对象发生了此事件,并依次通知它们的事件侦听器。此过程从舞台开始,并在显示列表中一直进行到发生事件的实际对象,然后再返回到舞台。此过程称为事件流。

事件对象
一个包含发生的特定事件的相关信息的对象,当调度事件时,此信息将被发送到所有侦听器。

事件目标
实际调度事件的对象。例如,如果用户单击位于 Sprite(位于舞台内)内的按钮,则所有这些对象将调度事件,但事件目标是指实际发生事件的对象,此处指单击的按钮。

侦听器
一个已将自身注册到某对象的对象或函数,以指示当特定事件发生时应该通知它。

目标阶段
事件已到达最具体的可能目标时所在的事件流点。目标阶段发生在捕获和冒泡阶段之间。