語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
事件目標是 Flash® Player 和 Adobe® AIR® 事件模型中很重要的一部分,適合作為焦點位置,說明事件在顯示清單階層中的流程。 當發生如按下滑鼠或按下按鍵等事件時,Flash Player 或 AIR 應用程式會從顯示清單的根傳送事件物件到事件流程。接著,事件物件會穿遍顯示清單,直到到達事件目標為止,這時它會經由顯示清單開始返回。 事件目標的這趟來回旅程,在概念上可分為三個階段: 捕捉階段包含從根到事件目標節點之前最後一個節點的旅程;目標階段只包含事件目標節點;而反昇階段則包含在返回顯示清單的根途中所遇到的任何後續節點。
一般來說,使用者定義的類別要取得事件傳送功能的最簡便方式,就是擴充 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 | ||
會傳回指定之物件的基本值。 | Object | ||
檢查此 EventDispatcher 物件是否已註冊事件偵聽程式,或者此物件的任何祖系已為特定事件類型註冊事件偵聽程式。 | EventDispatcher |
事件 | 摘要 | 定義自 | ||
---|---|---|---|---|
[廣播事件] 當 Flash Player 或 AIR 應用程式取得作業系統焦點並成為作用中時傳送。 | EventDispatcher | |||
[廣播事件] 當 Flash Player 或 AIR 應用程式失去作業系統焦點並成為非作用中時傳送。 | EventDispatcher |
EventDispatcher | () | 建構函式 |
public function EventDispatcher(target:IEventDispatcher = null)
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
彙總 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 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
會在 EventDispatcher 物件註冊事件偵聽程式,以便讓偵聽程式收到事件的通知。您可以在顯示清單上的所有節點,為特定類型的事件、階段與優先順序註冊事件偵聽程式。
當您成功註冊事件偵聽程式後,就不可以透過對 addEventListener()
的額外呼叫來變更其優先順序。 若要變更偵聽程式的優先順序,您必須先呼叫 removeListener()
。 然後,您就可以使用新的優先順序等級來重新註冊偵聽程式。
請記住,一旦您註冊了偵聽程式,對 addEventListener()
進行後續呼叫,若使用不同的 type
或 useCapture
值,將會導致建立個別的偵聽程式註冊程序。 例如,如果您先將 useCapture
設為 true
來註冊偵聽程式,則只會在捕捉階段進行偵聽。 如果您使用相同的偵聽程式物件,再次呼叫 addEventListener()
(但將 useCapture
設為 false
) 會得到兩個不同的偵聽程式: 一個會在捕捉階段進行偵聽,另一個則會在目標與反昇階段進行偵聽。
您無法單獨針對目標階段或反昇階段註冊事件偵聽程式。 由於反昇階段只適用於目標節點的祖系,因此這兩種階段必須一起進行註冊。
如果您不再需要事件偵聽程式,可以呼叫 removeEventListener()
來移除它,否則可能產生記憶體問題。 事件偵聽程式不會自動從記憶體中移除,因為只要傳送的物件存在,垃圾回收器就不會移除偵聽程式 (除非 useWeakReference
參數設定為 true
)。
複製 EventDispatcher 實體並不會將附加在該實體上的事件偵聽程式一併複製 (如果新建立的節點需要事件偵聽程式,則您必須在建立節點後再附加偵聽程式)。 然而,如果您移動了 EventDispatcher 實體,則附加的事件偵聽程式也會跟著移動。
若於此節點正在處理事件的同時將事件偵聽程式註冊到某個節點上,則事件偵聽程式不會在目前階段觸發,但會在事件流程的後續階段 (例如反昇階段) 中觸發。
如果您在節點正在處理事件的同時將事件偵聽程式從節點中移除,則事件偵聽程式還是會被目前的動作觸發。 一旦移除了事件偵聽程式,就無法再叫用它 (除非您為了日後的處理而再次註冊它)。
參數
type:String — 事件類型。
| |
listener:Function — 處理事件的偵聽程式函數。此函數必須接受 Event 物件並當做唯一的參數,而且必須傳回空值,如下列範例所示:
function(evt:Event):void 函數可以具有任何名稱。 | |
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 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
會將事件傳送到事件流程。事件目標就是呼叫 dispatchEvent()
方法時所需的 EventDispatcher 物件。
參數
event:Event — 傳送至事件流程中的 Event 物件。 如果重新傳送事件,會自動建立事件副本。 一旦傳送了事件,就無法變更其 target 屬性,因此您必須建立事件的新副本,重新傳送才能成功。
|
Boolean — 如果成功傳送事件,則為 true 值。 false 值代表失敗,或是事件已經呼叫 preventDefault() 。
|
擲回值
Error — 已達到事件傳送遞迴限制。
|
hasEventListener | () | 方法 |
public function hasEventListener(type:String):Boolean
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
會檢查 EventDispatcher 物件是否有對特定的事件類型註冊偵聽程式。 這可讓您判斷 EventDispatcher 物件是否已經改變事件流程階層中事件類型的處理方式。 若要判斷特定事件類型是否已經實際觸發事件偵聽程式,請使用 willTrigger()
。
hasEventListener()
與 willTrigger()
之間的差異在於 hasEventListener()
只檢查所屬的物件,而 willTrigger()
則會檢查整個事件流程中 type
參數所指定的事件。
從 LoaderInfo 物件呼叫 hasEventListener()
時,只會考量呼叫者可以存取的偵聽程式。
參數
type:String — 事件類型。
|
Boolean — 如果註冊了特定類型的偵聽程式,則值為 true 值,否則為 false 。
|
相關 API 元素
removeEventListener | () | 方法 |
public function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
會從 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 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
檢查此 EventDispatcher 物件是否已註冊事件偵聽程式,或者此物件的任何祖系已為特定事件類型註冊事件偵聽程式。當特定類型的事件傳送至此 EventDispatcher 物件或其任何後代時,如果事件偵聽程式在事件流程的任何階段觸發,此方法就會傳回 true
。
hasEventListener()
與 willTrigger()
方法之間的差異在於 hasEventListener()
只檢查所屬的物件,而 willTrigger()
則會檢查整個事件流程中 type
參數所指定的事件。
從 LoaderInfo 物件呼叫 willTrigger()
時,只會考量呼叫者可以存取的偵聽程式。
參數
type:String — 事件類型。
|
Boolean — 如果即將觸發特定類型的偵聽程式,則為 true 值,否則為 false 。
|
activate | 事件 |
flash.events.Event
屬性 Event.type =
flash.events.Event.ACTIVATE
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
[廣播事件] 當 Flash Player 或 AIR 應用程式取得作業系統焦點並成為作用中時傳送。這是廣播事件,表示所有具有針對此事件註冊之偵聽程式的 EventDispatcher 物件都會加以傳送。如需有關廣播事件的詳細資訊,請參閱 DisplayObject 類別。
ACTIVATE
常數會定義 activate
事件物件的 type
屬性值。
注意:這個事件沒有「捕捉階段」也沒有「反昇階段」,這表示事件偵聽程式必須直接加入至任何可能的目標,不論目標是否在顯示清單上。
AIR for TV 裝置永遠不會自動傳送此事件。但是,您可以手動傳送。
這個事件具有下列屬性:
屬性 | 值 |
---|---|
bubbles | false |
cancelable | false ;沒有要取消的預設行為指令。 |
currentTarget | 正主動使用事件偵聽程式處理 Event 物件的物件。 |
target | 具有為 activate 事件註冊之偵聽程式的任何 DisplayObject 實體。 |
相關 API 元素
deactivate | 事件 |
flash.events.Event
屬性 Event.type =
flash.events.Event.DEACTIVATE
語言版本: | ActionScript 3.0 |
執行階段版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
[廣播事件] 當 Flash Player 或 AIR 應用程式失去作業系統焦點並成為非作用中時傳送。這是廣播事件,表示所有具有針對此事件註冊之偵聽程式的 EventDispatcher 物件都會加以傳送。如需有關廣播事件的詳細資訊,請參閱 DisplayObject 類別。
Event.DEACTIVATE
常數會定義 deactivate
事件物件的 type
屬性值。
注意:這個事件沒有「捕捉階段」也沒有「反昇階段」,這表示事件偵聽程式必須直接加入至任何可能的目標,不論目標是否在顯示清單上。
AIR for TV 裝置永遠不會自動傳送此事件。但是,您可以手動傳送。
這個事件具有下列屬性:
屬性 | 值 |
---|---|
bubbles | false |
cancelable | false ;沒有要取消的預設行為指令。 |
currentTarget | 正主動使用事件偵聽程式處理 Event 物件的物件。 |
target | 具有為 deactivate 事件註冊之偵聽程式的任何 DisplayObject 實體。 |
相關 API 元素
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)); } }
Tue Jun 12 2018, 03:47 PM Z