| 套件 | flash.events |
| 類別 | public class EventDispatcher |
| 繼承 | EventDispatcher Object |
| 實作 | IEventDispatcher |
| 子類別 | Animator, Camera, ContextMenu, ContextMenuItem, DataProvider, DisplayObject, FileReference, FileReferenceList, IME, LoaderInfo, LocalConnection, Locale, Microphone, NetConnection, NetStream, PrintJob, RadioButtonGroup, SharedObject, Socket, Sound, SoundChannel, StyleSheet, Timer, Transition, TransitionManager, Tween, URLLoader, URLStream, XMLSocket |
| 語言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
事件目標是 Flash ® Player 事件模型中很重要的一部分, 適合作為焦點位置,說明事件在顯示清單階層中的流程。 當發生如按下滑鼠或按下按鍵等事件時,Flash Player 會從顯示清單的根傳送事件物件到事件流程。 接著,事件物件會穿遍顯示清單,直到到達事件目標為止,這時它會經由顯示清單開始返回。 事件目標的這趟來回旅程,在概念上可分為三個階段: 捕捉階段包含從根到事件目標節點之前最後一個節點的旅程;目標階段只包含事件目標節點;而反昇階段則包含在返回顯示清單的根途中所遇到的任何後續節點。
一般來說,使用者定義的類別要取得事件傳送功能的最簡便方式,就是擴充 EventDispatcher。 如果無法擴充 (也就是說,如果此類別已經擴充其它類別),您可以改為實作 IEventDispatcher 介面、建立 EventDispatcher 成員,然後撰寫簡單的攔截程序將呼叫遞送到彙總的 EventDispatcher。
| 方法 | 定義自 | ||
|---|---|---|---|
|
EventDispatcher(target:IEventDispatcher = null)
彙總 EventDispatcher 類別的實體。
| EventDispatcher | ||
|
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
會在 EventDispatcher 物件註冊事件偵聽程式¡以便讓偵聽程式收到事件的通知。
| EventDispatcher | ||
|
會將事件傳送到事件流程。
| EventDispatcher | ||
|
會檢查 EventDispatcher 物件是否有對特定的事件類型註冊偵聽程式。
| EventDispatcher | ||
![]() |
指出物件是否有已定義的指定屬性。
| Object | |
![]() |
指出 Object 類別的實體是否位於指定為參數的物件原型鏈中。
| Object | |
![]() |
指出指定的屬性是否存在,以及是否可列舉。
| Object | |
|
會從 EventDispatcher 物件移除偵聽程式。
| EventDispatcher | ||
![]() |
為迴圈作業設定動態屬性的可用性。
| Object | |
![]() |
會傳回指定之物件的字串形式。
| Object | |
![]() |
會傳回指定之物件的基本值。
| Object | |
|
檢查此 EventDispatcher 物件是否已註冊為事件偵聽程式,或者此物件的任何祖先已註冊為特定的事件類型。
| EventDispatcher | ||
| 事件 | 摘要 | 定義自 | ||
|---|---|---|---|---|
| 當 Flash Player 取得作業系統焦點並成為作用中狀態時傳送。 | EventDispatcher | |||
| 當 Flash Player 失去作業系統焦點並成為停用狀態時傳送。 | EventDispatcher | |||
| EventDispatcher | () | 建構函式 |
public function EventDispatcher(target:IEventDispatcher = null)
| 語言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
彙總 EventDispatcher 類別的實體。
EventDispatcher 類別通常會被當成基底類別來使用,也就是說,大部分的開發人員並不需要用到這個建構函數。 不過,進階的開發人員在實作 IEventDispatcher 介面時會需要用到這個建構函式。 如果您無法擴充 EventDispatcher 類別,而必須改為實作 IEventDispatcher 介面,請使用這個建構函式來彙總 EventDispatcher 類別的實體。
參數target:IEventDispatcher (default = null) — 傳送至 EventDispatcher 物件的事件目標物件。 當您使用實作 EventDispatcher 的類別來彙總 IEventDispatcher 實體時,就會用到這個參數;這個必要的參數可讓包含物件成為事件目標。 如果情況單純,只是某個類別擴充了 EventDispatcher,請勿使用此參數。
|
| addEventListener | () | 方法 |
public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
| 語言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
會在 EventDispatcher 物件註冊事件偵聽程式¡以便讓偵聽程式收到事件的通知。 您可以在顯示清單上的所有節點,為特定類型的事件、階段與優先順序註冊事件偵聽程式。
當您成功註冊事件偵聽程式後,就不可以透過對 addEventListener() 的額外呼叫來變更其優先順序。 若要變更偵聽程式的優先順序,您必須先呼叫 removeListener()。 然後,您就可以使用新的優先順序等級來重新註冊偵聽程式。
請記住,一旦您註冊了偵聽程式,對 addEventListener() 進行後續呼叫,若使用不同的 type 或 useCapture 值,將會導致建立個別的偵聽程式註冊程序。 例如,如果您先將 useCapture 設為 true 來註冊偵聽程式,則只會在捕捉階段進行偵聽。 如果您使用相同的偵聽程式物件,再次呼叫 addEventListener() (但將 useCapture 設為 false) 會得到兩個不同的偵聽程式: 一個會在捕捉階段進行偵聽,另一個則會在目標與反昇階段進行偵聽。
您無法單獨針對目標階段或反昇階段註冊事件偵聽程式。 由於反昇階段只適用於目標節點的祖先,因此這兩種階段必須一起進行註冊。
如果您不再需要事件偵聽程式,可以呼叫 removeEventListener() 來移除它,否則可能產生記憶體問題。 含有已註冊之事件偵聽程式的物件不會自動從記憶體中移除,因為垃圾回收器不會將仍保有參照的物件移除。
複製 EventDispatcher 實體並不會將附加在該實體上的事件偵聽程式一併複製 (如果新建立的節點需要事件偵聽程式,則您必須在建立節點後再附加偵聽程式)。 然而,如果您移動了 EventDispatcher 實體,則附加的事件偵聽程式也會跟著移動。
若於此節點正在處理事件的同時將事件偵聽程式註冊到某個節點上,則事件偵聽程式不會在目前階段觸發,但會在事件流程的後續階段 (例如反昇階段) 中觸發。
如果您在節點正在處理事件的同時將事件偵聽程式從節點中移除,則事件偵聽程式還是會被目前的動作觸發。 一旦移除了事件偵聽程式,就無法再叫用它 (除非您為了日後的處理而再次註冊它)。
參數
type:String — 事件類型。
|
|
listener:Function — 處理事件的偵聽程式函數。 此函數必須接受 Event 物件並當作唯一的參數,而且必須傳回空值,如下列範例所示:
函數可以具有任何名稱。 |
|
useCapture:Boolean (default = false) — 判斷偵聽程式是否可在捕捉階段或目標與反昇階段運作。 如果 useCapture 設為 true,則偵聽程式只會在捕捉階段 (而不是在目標或反昇階段) 處理事件。 如果 useCapture 為 false,則偵聽程式只會在目標或反昇階段處理事件。 若要在全部三個階段中偵聽事件,請呼叫 addEventListener 兩次,先將 useCapture 設為 true 後進行第一次呼叫,接著將 useCapture 設為 false 再進行第二次呼叫。
|
|
priority:int (default = 0) — 事件偵聽程式的優先順序等級。 優先順序是由一個具有正負號的 32 位元整數所指定。 數字越大,代表優先順序越高。 所有優先順序為 n 的偵聽程式都會比優先順序為 n -1 的偵聽程式優先處理。 如果有兩個以上的偵聽程式共用同一個優先順序,則會依據加入的先後次序來處理。 預設的優先順序為 0。
|
|
useWeakReference:Boolean (default = false) — 判斷偵聽程式的參照為強或弱。 強參照 (預設) 會避免偵聽程式被垃圾回收器從記憶體中移除, 弱參照則無法避免這個情況發生。 類別層級的成員函數不受記憶體回收限制,因此您可以將類別層級成員函數的 |
ArgumentError — 指定的 listener 不是函數。
|
請參閱
| dispatchEvent | () | 方法 |
public function dispatchEvent(event:Event):Boolean
| 語言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
會將事件傳送到事件流程。 事件目標就是呼叫 dispatchEvent() 方法時所需的 EventDispatcher 物件。
參數
event:Event — 傳送至事件流程中的 Event 物件。 如果重新傳送事件,會自動建立事件副本。 一旦傳送了事件,就無法變更其 target 屬性,因此您必須建立事件的新副本,重新傳送才能成功。
|
Boolean — 如果成功傳送事件,則為 true 值。 false 值代表失敗,或是事件已經呼叫 preventDefault()。
|
Error — 已達到事件傳送遞迴限制。
|
| hasEventListener | () | 方法 |
public function hasEventListener(type:String):Boolean
| 語言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
會檢查 EventDispatcher 物件是否有對特定的事件類型註冊偵聽程式。 這可讓您判斷 EventDispatcher 物件是否已經改變事件流程階層中事件類型的處理方式。 若要判斷特定事件類型是否已經實際觸發事件偵聽程式,請使用 willTrigger()。
hasEventListener() 與 willTrigger() 之間的差異在於 hasEventListener() 只檢查所屬的物件,而 willTrigger() 則會檢查整個事件流程中 type 參數所指定的事件。
從 LoaderInfo 物件呼叫 hasEventListener() 時,只會考量呼叫者可以存取的偵聽程式。
參數
type:String — 事件類型。
|
Boolean — 如果註冊了特定類型的偵聽程式,則值為 true 值,否則為 false。
|
請參閱
| removeEventListener | () | 方法 |
public function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
| 語言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
會從 EventDispatcher 物件移除偵聽程式。 如果沒有相符的偵聽程式以 EventDispatcher 物件來註冊,則呼叫此方法不會產生任何作用。
參數
type:String — 事件類型。
|
|
listener:Function — 要移除的偵聽程式物件。
|
|
useCapture:Boolean (default = false) — 指定偵聽程式是否針對捕捉階段或目標與反昇階段而註冊。 如果偵聽程式同時針對捕捉階段和目標與反昇階段而註冊,則必須移除對 removeEventListener() 的兩次呼叫 (一次呼叫的 useCapture() 是設為 true,另一次呼叫的 useCapture() 則是設定為 false),才能移除這兩個階段。
|
請參閱
| willTrigger | () | 方法 |
public function willTrigger(type:String):Boolean
| 語言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
檢查此 EventDispatcher 物件是否已註冊為事件偵聽程式,或者此物件的任何祖先已註冊為特定的事件類型。 當特定類型的事件傳送至此 EventDispatcher 物件或其任何後代時,如果事件偵聽程式在事件流程的任何階段觸發,此方法就會傳回 true。
hasEventListener() 與 willTrigger() 方法之間的差異在於 hasEventListener() 只檢查所屬的物件,而 willTrigger() 則會檢查整個事件流程中 type 參數所指定的事件。
從 LoaderInfo 物件呼叫 willTrigger() 時,只會考量呼叫者可以存取的偵聽程式。
參數
type:String — 事件類型。
|
Boolean — 如果即將觸發特定類型的偵聽程式,則為 true 值,否則為 false。
|
| activate | 事件 |
flash.events.Event
flash.events.Event.ACTIVATE
| 語言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
當 Flash Player 取得作業系統焦點並成為作用中狀態時傳送。
定義activate 事件物件的 type 屬性值。
注意:這個事件不會經歷「捕捉階段」,而且不管目標是否在顯示清單上,都會直接傳送至目標。
這個事件具有下列屬性:
| 屬性 | 值 |
|---|---|
bubbles | false |
cancelable | false;沒有要取消的預設行為指令。 |
currentTarget | 以事件偵聽程式主動處理 Event 物件的物件。 |
target | 具有註冊為 ACTIVATE 事件之偵聽程式的任何 DisplayObject 實體。 |
| deactivate | 事件 |
flash.events.Event
flash.events.Event.DEACTIVATE
| 語言版本 : | ActionScript 3.0 |
| Player 版本 : | Flash Player 9 |
當 Flash Player 失去作業系統焦點並成為停用狀態時傳送。
定義deactivate 事件物件的 type 屬性值。
注意:這個事件不會經歷「捕捉階段」,而且不管目標是否在顯示清單上,都會直接傳送至目標。
這個事件具有下列屬性:
| 屬性 | 值 |
|---|---|
bubbles | false |
cancelable | false;沒有要取消的預設行為指令。 |
currentTarget | 以事件偵聽程式主動處理 Event 物件的物件。 |
target | 具有註冊為 DEACTIVATE 事件之偵聽程式的任何 DisplayObject 實體。 |
EventDispatcherExample 類別和 CustomDispatcher 類別,以及 EventDispatcher 的子類別,說明自訂事件的建立及傳送方式。 這個範例會執行下列工作:
EventDispatcherExample 的建構函式會建立一個區域變數 dispatcher,並將其指定給新的 CustomDispatcher 實體。CustomDispatcher 內部會設定一個字串,因此事件的名稱會為 action,並且會宣告 doAction() 方法。 在呼叫時,此方法會建立 action 事件並使用 EventDispatcher.dispatchEvent() 傳送該事件。dispatcher 屬性用來新增 action 事件偵聽程式及相關的訂閱者方法 actionHandler(),該方法會簡單地列印與傳送事件時有關的資訊。doAction() 方法來傳送 action 事件。
package {
import flash.display.Sprite;
import flash.events.Event;
public class EventDispatcherExample extends Sprite {
public function EventDispatcherExample() {
var dispatcher:CustomDispatcher = new CustomDispatcher();
dispatcher.addEventListener(CustomDispatcher.ACTION, actionHandler);
dispatcher.doAction();
}
private function actionHandler(event:Event):void {
trace("actionHandler: " + event);
}
}
}
import flash.events.EventDispatcher;
import flash.events.Event;
class CustomDispatcher extends EventDispatcher {
public static var ACTION:String = "action";
public function doAction():void {
dispatchEvent(new Event(CustomDispatcher.ACTION));
}
}
目前頁面: http://livedocs.adobe.com/flash/9.0_tw/ActionScriptLangRefV3/flash/events/EventDispatcher.html