事件 (Events) 與處理 (Handling)

事件 (event)
發生在物件上的特定事情,而該物件可告知其它物件所發生的事情。例如,在舞台上「按一下滑鼠」 (click) 就屬於與使用者互動的一種事件。
預設行為 (default behavior)
有些事件包括一種行為,會隨著該事件當然地發生,就稱為預設行為。例如,當使用者在文字輸入框中打字,即是發生文字輸入事件 (text input event) ,而接下來當然就會依據所輸入的字元實際顯示在文字框中,這就是預設行為 (不需要再特別撰寫程式) ;但是我們也可以另外撰寫程式覆蓋掉這類的預設行為 (例如不希望讓輸入的字元立即顯示出來) 。
派送 (dispatch)
通知事件偵聽程式 (event listeners) 某種事件已發生。
事件目標 (event target)
實際派送事件的物件。假設,使用者按下位於舞台上 con 物件內的 bt 按鈕物件時,所有的物件 (舞台、 con 、 bt) 都會派送事件,但是事件目標則是實際發生事件 (已被指定) 的物件,在這裡通常是被按下的按鈕 bt 物件。
事件流程 (event flow)
當事件發生在顯示清單中的某個物件時,包含此物件的所有物件都會被通知這個事件的發生,並轉而通知物件 (已被指定) 的事件偵聽程式 (event listeners) 。這個程序會從舞台開始,經過顯示清單架構直到發生事件的實際物件,然後反過來再回溯到舞台,這樣的程序稱為事件流程。在概念上可分為三個階段:
  1. 捕捉階段 (capture phase) :包含從根 (root) 直到事件目標節點之前最後一個節點 (node) 。
  2. 目標階段 (target phase) :就是指事件目標節點。
  3. 反昇階段 (bubbling phase) :包含返回到根的任何後續節點。
偵聽程式 (listener)
一個函式 (或物件) ,將本身註冊 (registered) 給一個物件 (目標) ,為了在指定的事件發生時會被通知,然後執行命令 (處理) 。在 actionscript 裡,偵聽及處理事件的程式指的是同一個函式
事件物件 (event object)
一種物件,具有特定事件發生的相關資訊,在事件被派送時,此事件物件會隨著傳送給所有偵聽程式。例如,按一下滑鼠 (click) 就會隨著建立滑鼠事件物件 (MouseEvent 類別的實體) 。

處理事件的基本模式

  1. function eventResponse(eventObject:EventType):void{
  2. //事件觸發後所要回應的處理程式(執行的動作)
  3. }
  4. eventTarget.addEventListener(EventType.EVENT_NAME,eventResponse);

function eventResponse() 函式就是「處理事件偵聽程式」,用來回應事件發生所要執行的動作 (程式) 。 eventTarget 是「事件目標」,就是一個指定的物件實體的名稱。 addEventListener() 是將「偵聽程式」註冊給事件目標的方法,當參數 EventType.EVENT_NAME 指定的事件發生,事件目標就會被通知,接著呼叫參數 eventResponse 函式,並將「事件物件」傳遞過去給名為 eventObject 的參數。這可以想成,偵聽程式,是物件專為處理事件的「方法」。

MovieClip 的操控:停止和播放

舞台上加入二個按鈕物件分別用來停止 (名為 stopBtn) 和播放 (名為 playBtn) MovieClip 物件,及一個名為 mcA 的 MovieClip 物件。

  1. import flash.display.*;
  2. import flash.events.*;
  3. function playClip(ev:MouseEvent):void{
  4. mcA.play();
  5. }
  6. function stopClip(ev:MouseEvent):void{
  7. mcA.stop();
  8. }
  9. playBtn.addEventListener(MouseEvent.CLICK,playClip);
  10. stopBtn.addEventListener(MouseEvent.CLICK,stopClip);

有時候我們希望以事件目標作為執行動作的對象,例如,有好幾個 MovieClip 物件任一個被按一下就改變 alpha 屬性,那麼就沒辦法在事件處理函式中明確指定物件名稱了,此時可以利用事件物件的 currentTargettarget 屬性指向目前處理事件的目標物件或最內層的事件目標物件。

舞台上放入二個 MovieClip 物件分別名為 mcA, mcB 。

  1. import flash.display.*;
  2. import flash.events.*;
  3. function chProp(ev:MouseEvent):void{
  4. ev.currentTarget.alpha-=0.1;
  5. }
  6. mcA.addEventListener(MouseEvent.CLICK,chProp);
  7. mcB.addEventListener(MouseEvent.CLICK,chProp);

ev 是傳遞過來的事件物件, currentTarget 屬性會指出目前處理事件物件的事件目標物件,而 target 則會指向實際發生事件的最內層子物件;如果事件目標沒有子物件, currentTargettarget 物件是會一樣的。

物件加入連結或指向位址

舞台上放一個名為 linkBtn 按鈕物件。

  1. import flash.display.*;
  2. import flash.events.*;
  3. import flash.net.*;
  4. function navTo(ev:MouseEvent):void{
  5. var uriAt:URLRequest=new URLRequest(指向位址的字串);
  6. navigateToURL(uriAt);
  7. }
  8. linkBtn.addEventListener(MouseEvent.CLICK, navTo);

Event 類別與物件 - flash.events 套件

Event 的屬性與方法

Event 繼承 Object
[屬性]
currentTarget
  • 取得目前處理事件物件的事件目標物件。
  • currentTarget:Object [唯讀]
  • ev.currentTarget.x=100 //指定處理 ev 物件的目標物件的 x 座標為 100 px 。
target
  • 取得實際發生事件最內層的事件目標物件。
  • target:Object [唯讀]
  • ev.target.x=100 //指定 ev 物件的事件目標物件的 x 座標為 100 px 。
[常數]
ENTER_FRAME
  • 進入新影格時的事件名稱。停留在某一影格,即依照影格速率連續地觸發事件。
  • public static const ENTER_FRAME:String="enterFrame"
  • Event.ENTER_FRAME
EXIT_FRAME
  • 結束目前影格時的事件名稱,所有的影格指令碼已經執行。停留在某一影格,即依照影格速率連續地觸發事件。
  • public static const EXIT_FRAME:String="exitFrame"
  • Event.EXIT_FRAME
MOUSE_LEAVE
  • 滑鼠離開舞台區域外的事件名稱,由 Stage 物件傳送。
  • public static const MOUSE_LEAVE:String="mouseLeave"
  • Event.MOUSE_LEAVE
COMPLETE
  • 完成工作的事件名稱,如完成由外載入 SWF 檔。
  • public static const COMPLETE:String="complete"
  • Event.COMPLETE
SOUND_COMPLETE
  • 聲音物件播放完畢的事件名稱。
  • public static const SOUND_COMPLETE:String="soundComplete"
  • Event.SOUND_COMPLETE
ADDED
  • 物件加入顯示清單的事件名稱,可以是尚未加入舞台的顯示清單。以下方法會觸發此事件:
    • DisplayObjectContainer.addChild()
    • DisplayObjectContainer.addChildAt()
  • public static const ADDED:String="added"
  • Event.ADDED
REMOVED
  • 物件從顯示清單移除的事件名稱,可以是尚未加入舞台的顯示清單,如果已在舞台顯示清單,也會觸發 REMOVED_FROM_STAGE 事件。以下方法會觸發此事件:
    • DisplayObjectContainer.removeChild()
    • DisplayObjectContainer.removeChildAt()
  • public static const REMOVED:String="removed"
  • Event.REMOVED
ADDED_TO_STAGE
  • 物件加入舞台顯示清單的事件名稱。以下方法會觸發此事件:
    • DisplayObjectContainer.addChild()
    • DisplayObjectContainer.addChildAt()
  • public static const ADDED_TO_STAGE:String="addedToStage"
  • Event.ADDED_TO_STAGE
REMOVED_FROM_STAGE
  • 物件從舞台顯示清單移除的事件名稱。以下方法會觸發此事件:
    • DisplayObjectContainer.removeChild()
    • DisplayObjectContainer.removeChildAt()
  • public static const REMOVED_FROM_STAGE:String="removedFromStage"
  • Event.REMOVED_FROM_STAGE

FocusEvent 類別與物件 - flash.events 套件

FocusEvent 的屬性與方法

FocusEvent 繼承 Event
[常數]
FOCUS_IN
  • 游標移入讓物件成為焦點的事件名稱。
  • public static const FOCUS_IN:String = "focusIn"
  • FocusEvent.FOCUS_IN
FOCUS_OUT
  • 游標移出讓物件失去焦點的事件名稱。
  • public static const FOCUS_OUT:String = "focusOut"
  • FocusEvent.FOCUS_OUT
KEY_FOCUS_CHANGE
  • 使用鍵盤變更物件焦點的事件名稱,同時傳送相對應的 focusIn 與 focusOut 事件。
  • public static const KEY_FOCUS_CHANGE:String = "keyFocusChange"
  • FocusEvent.KEY_FOCUS_CHANGE
MOUSE_FOCUS_CHANGE
  • 使用滑鼠等指向裝置變更物件焦點的事件名稱,同時傳送相對應的 focusIn 與 focusOut 事件。
  • public static const MOUSE_FOCUS_CHANGE:String = "mouseFocusChange"
  • FocusEvent.MOUSE_FOCUS_CHANGE

KeyboardEvent 類別與物件 - flash.events 套件

KeyboardEvent 的屬性與方法

KeyboardEvent 繼承 Event
[屬性]
charCode
  • 指出發生鍵盤按鍵事件的按鍵字元碼,只會回應標準英文鍵盤的值。
  • charCode:uint [讀寫]
  • var k:uint=ev.charCode //將 ev 物件的按鍵字元碼指定給 k 物件。
keyCode
  • 指出發生鍵盤按鍵事件的按鍵代碼。
  • keyCode:uint [讀寫]
  • var k:uint=ev.keyCode //將 ev 物件的按鍵代碼指定給 k 物件。
keyLocation
  • 指出發生鍵盤按鍵事件的按鍵在鍵盤上的按鍵區域,如 keyLocation.NUM_PAD 指的是數字鍵區的數字鍵;如按鍵有配置二個以上 (如: Ctrl 鍵) , keyLocation.LEFT 指在鍵盤左側區的, keyLocation.RIGHT 指在鍵盤右側區的 。
  • keyLocation:uint [讀寫]
  • var k:uint=ev.keyLocation //將 ev 物件的鍵盤位置碼指定給 k 物件。
[方法]
updateAfterEvent()
  • 在事件發生之後,依據更新後的顯示清單重新顯示畫面。
  • public function updateAfterEvent():void
  • ev.updateAfterEvent() // ev 物件的事件發生後更新顯示畫面。
[常數]
KEY_DOWN
  • 在目標範圍上按下鍵盤按鍵的事件名稱。
  • public static const KEY_DOWN:String="keyDown"
  • KeyboardEvent.KEY_DOWN
KEY_UP
  • 在目標範圍上放開鍵盤按鍵的事件名稱。
  • public static const KEY_UP:String="keyUp"
  • KeyboardEvent.KEY_UP

MouseEvent 類別與物件 - flash.events 套件

MouseEvent 的屬性與方法

MouseEvent 繼承 Event
[屬性]
localX
  • 取得觸發事件的 x 區域座標,以物件本身為基準座標。
  • localX:Number
  • lx=ev.localX; // 將目標物件發生事件的 x 區域座標,指定給 lxev 為事件物件。
localY
  • 取得觸發事件的 y 區域座標,以物件本身為基準座標。
  • localY:Number
  • ly=ev.localY; // 將目標物件發生事件的 y 區域座標,指定給 lyev 為事件物件。
stageX
  • 取得觸發事件的 x 全域座標,以舞台為基準座標。會隨著 localX 改變而自動改變。
  • stageX:Number [唯讀]
  • sx=ev.stageX; // 將目標物件發生事件的 x 舞台座標,指定給 sxev 為事件物件。
stageY
  • 取得觸發事件的 y 全域座標,以舞台為基準座標。會隨著 localY 改變而自動改變。
  • stageY:Number [唯讀]
  • sy=ev.stageY; // 將目標物件發生事件的 y 舞台座標,指定給 syev 為事件物件。
delta
  • 指出滾動滑鼠滾輪一刻度 (一單位) 的捲動行數。內容向上捲動 (滾輪向自己方向滾) 為正值,反之為負值。這個屬性只適用於 MouseEvent.MOUSE_WHEEL 事件。
  • delta:int [讀寫]
  • if(ev.delta>0){ev.target.scaleX+=0.02;ev.target.scaleY=ev.target.scaleX;} // 在目標物件上滾動滾輪,放大物件; ev 為事件物件。
[方法]
updateAfterEvent()
  • 在事件發生之後,依據更新後的顯示清單重新顯示畫面。
  • public function updateAfterEvent():void
  • ev.updateAfterEvent() // ev 物件的事件發生後更新顯示畫面。
[常數]
CLICK
  • 在目標範圍上按一下滑鼠主要鍵的事件名稱。
  • public static const CLICK:String="click"
  • MouseEvent.CLICK
MOUSE_DOWN
  • 在目標範圍上按下滑鼠主要鍵的事件名稱。
  • public static const MOUSE_DOWN:String="mouseDown"
  • MouseEvent.MOUSE_DOWN
MOUSE_UP
  • 在目標範圍上放開滑鼠主要鍵的事件名稱。
  • public static const MOUSE_UP:String="mouseUp"
  • MouseEvent.MOUSE_UP
MOUSE_OVER
  • 滑鼠滑進目標範圍的事件名稱。
  • public static const MOUSE_OVER:String="mouseOver"
  • MouseEvent.MOUSE_OVER
MOUSE_OUT
  • 滑鼠滑出目標範圍的事件名稱。
  • public static const MOUSE_OUT:String="mouseOut"
  • MouseEvent.MOUSE_OUT
MOUSE_MOVE
  • 滑鼠在目標範圍上滑動的事件名稱。
  • public static const MOUSE_MOVE:String="mouseMove"
  • MouseEvent.MOUSE_MOVE
MOUSE_WHEEL
  • 在目標範圍上捲動滑鼠滾輪的事件名稱。
  • public static const MOUSE_WHEEL:String="mouseWheel"
  • MouseEvent.MOUSE_WHEEL
DOUBLE_CLICK
  • 在目標範圍上快按二下滑鼠主要鍵的事件名稱。物件的 doubleClickEnabled 屬性必須定義為 true ,事件才會有作用。
  • public static const DOUBLE_CLICK:String="doubleClick"
  • MouseEvent.DOUBLE_CLICK

ProgressEvent 類別與物件 - flash.events 套件

ProgressEvent 的屬性與方法

ProgressEvent 繼承 Event
[屬性]
bytesLoaded
  • 取得載入作業進行中的目前已載入的位元組數。
  • bytesLoaded:Number [讀寫]
  • var l:Number=ev.bytesLoaded //將 ev 物件作業中已載入的位元組數指定給 l 物件。
bytesTotal
  • 取得載入檔的總位元組數。
  • bytesTotal:Number [讀寫]
  • var l:Number=ev.bytesTotal //將 ev 物件作業中載入檔的總位元組數指定給 l 物件。
[常數]
PROGRESS
  • 載入作業正在進行中的事件名稱。
  • public static const PROGRESS:String="progress"
  • ProgressEvent.PROGRESS

ScrollEvent 類別與物件 - fl.events 套件

ScrollEvent 的屬性與方法

ScrollEvent 繼承 Event
[常數]
SCROLL
  • 捲動捲軸的事件名稱。
  • public static const SCROLL:String = "scroll"
  • ScrollEvent.SCROLL

SliderEvent 類別與物件 - fl.events 套件

SliderEvent 的屬性與方法

SliderEvent 繼承 Event
[屬性]
value
  • 取得滑軌目前的對應值。
  • value:Number [唯讀]
  • var a:Number=ev.value //將 ev 物件的對應值指定給 a 物件。
[常數]
CHANGE
  • 滑軌有變動時的事件名稱。
  • public static const CHANGE:String = "change"
  • SliderEvent.CHANGE

TextEvent 類別與物件 - flash.events 套件

TextEvent 的屬性與方法

TextEvent 繼承 Event
[屬性]
text
  • TextEvent.TEXT_INPUT 事件時,取得使用者輸入的字元組;在 TextEvent.LINK 事件時,取得 a 連結屬性值 (如 href='event:case') 其中 event 協定值的字串 (此例會取得 "case")。
  • text:String [讀寫]
  • var te:String=ev.text //將 ev 物件的輸入字元組內容指定給 te 物件。
[常數]
TEXT_INPUT
  • 使用者在物件輸入內容的事件名稱。按 Delete, Backspace 鍵不會傳送此事件。
  • public static const TEXT_INPUT:String = "textInput"
  • TextEvent.TEXT_INPUT
LINK
  • 使用者執行有連結的文字的事件名稱。
  • public static const LINK:String = "link"
  • TextEvent.LINK