什麼是事件:是物件內部狀態發生了變化,或者物件做某些動作時(或做之前,做之後)向外界發出的通知。
註冊時間的基本形式:
1註冊事件偵聽器
處理事件的物件.addeventlistener(事件型別,偵聽器函式)
2定義事件偵聽器
function 偵聽器函式(e:事件類):void(預設為void){
此處為響應事件執行的動作
移除事件的基本形式:
處理事件的物件.removeeventlistener(事件型別,偵聽器函式)
分析:
處理事件的物件:
as3處理事件最關鍵的是addeventlistener()函式(或稱為方法),這個函式是在eventdispatcher類定義的,這個類中共有六個例項方法:
eventdispatcher() 建構函式,可用於建立例項
addeventlistener() 用於註冊事件偵聽器
dispatcherevent() 用於自定義事件
haseventlistener() 檢測是不是註冊某個事件偵聽器
removeeventlistener() 用於移除事件偵聽器
willtrigger() 檢測是不是註冊某個事件偵聽器
由此可以看出,eventdispatcher類主要用於事件偵聽器的註冊,移除等。由於displayobject類是eventdispatcher類的子類,而displayobject類是所有顯示類的父類,因此,所有顯示物件都可以看成是eventdispatcher類的例項,所以所有顯示例項都能成為處理事件的物件。(注意一點,timer類同樣繼承了eventdispatcher類,因此timer物件同樣可以成為處理事件的物件)
事件型別:
在事件處理中,事件主要由事件型別,事件物件等組成。事件型別一般用常量字串表示,但在實際程式設計中,一般不直接使用常量字串表示,而是用事件類的的靜態屬性來表示字串。
偵聽器函式:
定義事件偵聽器函式時必須定義唯一乙個引數,這個引數實際上是事件類的例項即事件物件,其資料型別是相關事件型別所屬的類。
事件物件:
在事件處理過程中,系統會自動建立乙個時間類的例項作為引數傳遞給事件偵聽器函式。這個引數往往稱為事件物件。事件物件是不可見的,用於後台操作,資訊交流。
事件類的構架:(略)
event類定義了事件處理所需的共同的屬性和方法(event類是一種特殊的抽象類,因為它可以例項化)。
事件流適用於顯示列表中,說明事件物件在顯示列表中穿行,遍歷其所有節點的過程:
捕獲階段:事件物件從根節點到目標節點。偵聽器偵聽事件物件是不是流過,若偵聽到事件物件流過,則執行偵聽程式。
目標階段:目標節點,偵聽器偵聽事件物件是不是流過,如果偵聽到事件物件流過,則執行偵聽程式。
冒泡階段:事件從目標節點流到根節點。偵聽器偵聽事件物件是不是流過,若偵聽到事件物件流過,則執行偵聽程式。
在使用addeventlistener()函式時,有名為usecapture的第三個引數,預設值為false,即在預設情況下,偵聽器不在捕獲階段處理事件,而在目標階段和冒泡階段處理事件,如果修改為true,則偵聽器只在捕獲階段處理事件。如果想同時讓偵聽器在捕獲階段和冒泡階段處理事件,則應把偵聽器註冊兩次,第一次把usecapture設定為true,第二次把usecapture設定為false。
event類的部分例項屬性:
bubbles:是乙個唯讀屬性,用來表示此事件是不是可以使用冒泡機制,如果為true,說明此事件具有冒泡階段,如果為false,說明此事件不具有冒泡階段。
eventphase:是乙個唯讀屬性,表示事件流的階段。這個屬性是通過數字來表示的,其中1表示冒泡階段,2表示目標階段,3表示冒泡階段。
target:該屬性指向事件目標。
currenttarget:該屬性指向事件物件當前所在的處理事件的物件。
type:表示事件型別(常量字串)
事件的預設行為:
例如,在乙個輸入文字的例項中,當使用者輸入文字時,會觸發textevent.text_input事件,這時,flash會把文字顯示出來,「顯示輸入文字」這個行為即預設行為。
可以通過event類的例項方法preventdefault()方法來阻止預設行為的發生,這是event類的例項方法。
要想知道該方法是不是被呼叫,可以用isdefaultprevented()方法來測試,如果為true,則代表呼叫,如果為false,則代表沒有呼叫。
要想知道某個預設行為能不能被阻止,可以通過event類的cancelable屬性檢視,true表示可以阻止,false表示不可以阻止。
事件的優先順序和事件阻止:
當為同乙個處理事件的物件註冊多個相同的事件型別時,事件偵聽器的執行會有一定的優先順序。
addeventlistener()函式有第四個引數,一般用priority表示,用來指定偵聽程式的優先順序,優先順序使用數字表示的,預設值為0,此時,偵聽程式的優先順序相同,按照註冊事件偵聽器的先後順序來執行。在指定addeventlistener()函式的第四個引數時,可以使用正數,負數,整數,按照數字的大小來決定偵聽程式執行的先後順序,大的先執行。
如果想改變乙個已經存在的偵聽程式的優先順序,先呼叫removeeventlistener()刪除事件,再重新註冊事件偵聽器。
event類提供了兩個重要的例項方法來阻止事件物件的傳遞,其中stoppropagation()方法是用來阻止事件流中當前處理事件的物件以後的事件物件的傳遞。
stopimmediatepropagation()方法則會阻止當前偵聽程式以後的所有。
因此事件流中如果每個顯示物件只註冊乙個事件偵聽器,使用這兩個方法是一樣的,但是,當乙個顯示物件註冊多個相同的事件型別時,這些偵聽程式會有優先順序,stopimmediatepropagation()方法將阻止優先順序低的或者優先順序相同但是靠後註冊的,而stoppropagation()方法對這些並沒有影響。
關於弱引用 (略)
處理displayobject類的事件
displayobject類具有六個基本事件型別,這六個基本事件型別都是由event類來管理的。
event.added added 當顯示例項被新增到顯示列表時觸發(觸發事件在註冊該事件的事件偵聽器之後,該事件具有不活捕獲階段和冒泡階段,事件目標是新增到顯示列表的顯示物件)
event.removed removed 當顯示例項從顯示列表中移除時觸發
event.render render 更新顯示列表時觸發。
由於displyobject類的這六個基本事件型別都是由event類來管理的,所以在處理事件時,必須要在displayobject類和event類之間發生關係。displayobject類的例項是處理事件的物件,,而event類的靜態屬性是事件型別,event類的例項是事件物件,偵聽器函式必須接受event類的例項作為引數,這就是事件的最基本原理。
事件處理基礎知識
您可以將事件視為 swf 檔案中發生的程式設計師感興趣的任何型別的事件。例如,大多數 swf 檔案都支援某些型別的使用者互動,無論是像響應滑鼠單擊這樣簡單的使用者互動,還是像接受和處理表單中輸入的資料這樣複雜的使用者互動。與 swf 檔案進行的任何此類使用者互動都可以視為事件。也可能會在沒有任何直接...
js事件 基礎知識
常用的事件 onclick 滑鼠單擊 ondblclick 滑鼠雙擊 onkeyup 按下並釋放鍵盤上的乙個鍵時觸發 onchange 文字內容或下拉列表中的選項發生改變 onfocus 獲得焦點,表示文字框等獲得滑鼠游標 onblur 失去焦點,表示文字框等失去滑鼠游標 onmouseover 滑...
UC OS II基礎知識之事件控制塊及事件處理函式
1.等待任務列表 為了將描述事件的資料結構統一起來,uc os ii使用事件控制塊ecb的資料結構來描述如訊號量,訊號佇列和郵箱這些事件。事件控制塊的資料結構如下所示 typedef struct os event os event endif 應用程式中的任務通過指標pevent來訪問事件控制塊,...