天天看點

事件處理基礎知識

事件處理簡介

您可以将事件視為 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):對象或在對象中注冊其自身的函數,用于訓示發生特定事件時應通知它。 
事件處理基礎知識