天天看点

事件处理基础知识

事件处理简介

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

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

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

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

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

function eventResponse(eventObject:EventType):void
{
    // 此处是为响应事件而执行的动作。
}

eventTarget.addEventListener(EventType.EVENT_NAME, eventResponse);
      

此代码执行两个操作。首先,它定义一个函数,这是指定为响应事件而执行的动作的方法。接下来,调用源对象的

addEventListener()

方法,实际上就是为指定事件"订阅"该函数,以便当该事件发生时,执行该函数的动作。当事件实际发生时,事件目标将检查其注册为事件侦听器的所有函数和方法的列表。然后,它依次调用每个对象,以将事件对象作为参数进行传递。

您需要在此代码中更改四项内容以创建自己的事件侦听器。第一,必须将函数名称更改为要使用的名称(必须在两个位置更改此内容,代码将在此处显示

eventResponse

)。第二,必须为要侦听的事件(代码中的

EventType

)所调度的事件对象指定相应的类名称,并且必须为特定事件(列表中的

EVENT_NAME

)指定相应的常量。第三,必须针对调度事件(此代码中的

eventTarget

)的对象调用

addEventListener()

方法。您可以选择更改用作函数参数(此代码中的

eventObject

)的变量的名称。

常见事件处理任务

下面是常见的事件处理任务,本章将介绍其中的每项任务:

  • 编写代码以响应事件
  • 阻止代码响应事件
  • 处理事件对象
  • 处理事件流:
    • 识别事件流信息
    • 停止事件流
    • 禁止默认行为
  • 从类中调度事件
  • 创建自定义事件类型

重要概念和术语

以下参考列表包含将会在本章中遇到的重要术语:

  • 默认行为 (Default behavior):某些事件包含通常与事件一起发生的行为(称为默认行为)。例如,当用户在文本字段中键入文本时,将引发文本输入事件。该事件的默认行为是实际显示在文本字段中键入的字符,但您可以覆盖该默认行为(如果由于某种原因,您不希望显示键入的字符)。
  • 调度 (Dispatch):通知事件侦听器发生了事件。
  • 事件 (Event):对象可以通知其它对象它所发生的情况。
  • 事件流 (Event flow):如果显示列表中的对象(屏幕上显示的对象)发生事件,则会向包含该对象的所有对象通知此事件,并依次通知其事件侦听器。此过程从舞台开始,并在显示列表中一直进行到发生事件的实际对象,然后再返回到舞台。此过程称为事件流。
  • 事件对象 (Event object):此对象包含发生的特定事件的相关信息,当调度事件时,此信息将被发送到所有侦听器。
  • 事件目标 (Event target):实际调度事件的对象。例如,如果用户单击位于 Sprite(位于舞台内)内的按钮,所有这些对象将调度事件,但事件目标是指实际发生事件的对象,此处指单击的按钮。
  • 侦听器 (Listener):对象或在对象中注册其自身的函数,用于指示发生特定事件时应通知它。 
事件处理基础知识