事件對象在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(鼠標擡起)等事件類型。