全面認識Flex事件機制
Flex有很多值得學習的地方,本文就向大家簡單介紹一下Flex事件機制,主要包括事件流,自定義事件等內容,相信通過本文的簡單介紹你對Flex事件機制一定會有深刻的認識。
Flex事件機制
Flex事件機制是觀察者模式,即首先要註冊事件,事件分發後通過事件響應函式進行處理。
例如在AS3中:
button.addEventListener(“click”,onClick);//向button註冊一個click事件 internalfunctiononClick(evt:MouseEvent):void{txt.text=“clickabutton!”;} //事件響應函式
那麼註冊事件註冊什麼呢?通過addEventListener註冊函式的引數可以看出,首先需要註冊事件型別(第一個引數),然後註冊響應函式,即事件發生後需要做什麼事情,也就是說呼叫哪一個方法。
◆那麼響應函式需要什麼要求呢?
響應函式必須要一個引數,指明註冊的事件的事件型別,如上面的例子,我們註冊的是一個滑鼠事件型別,即滑鼠單擊事件。註冊的事件型別必須和響應函式的事件型別一致!
◆到底有哪些事件型別呢?
除了有系統預設的事件型別外,我們可以定義自己的事件和事件型別。簡單的說,事件型別就是定義在事件類的常量屬性。
Flex事件機制中的事件流
1.捕獲階段(從根節點到子節點,檢測物件是否註冊了監聽器,是則呼叫監聽函式) 2.目標階段(呼叫目標物件本身註冊的監聽程式) 3.冒泡階段(從目標節點到根節點,檢測物件是否註冊了監聽器,是則呼叫監聽函式)注:事件發生後,每個節點可以有2個機會(2選1)響應事件,預設關閉捕獲階段。從上到下(從根到目標)是捕獲階段,到達了目標後是目標階段,然後從目標向上返回是冒泡階段。
怎樣理解事件流?
當事件發生時,FLEX通過事件的分發器EventDispatcher進行事件分發,分發的順序是:從上往下到達目標,然後從下往上,從目標開始返回。如上面1、2、3所說的那樣,這裡就會有一個問題,在事件的流經過程中,不是目標的物件如果註冊了事件,也有了相應的事件響應函式,那麼不是目標的物件響應了事件的處理,這怎麼辦呢?由於上面說的那樣,addEventListener在只有如上兩個引數的牧人情況下是關閉捕獲階段的,也就是說事件流是從目標階段開始的,然後是冒泡階段,當出現容器包含控制元件的時候,可以使用判斷 if(evt.target==evt.currentTarget) 來確定當前事件流上的當前流經物件是否就是目標物件,如果是就進行相應的處理。
移除物件的事件流:removeEventListener(),引數與註冊事件相同。阻斷事件流中目標物件的後繼事件,即通過了目標階段後阻止冒泡階段: event類的方法:publicfunctionstopImmediatePropagation():void
Flex事件機制中的Event類
Event類作為建立Event物件的基類,當發生事件時,Event物件將作為引數傳遞給事件偵聽器。如MouseEvent、KeyboardEvent,更多的可以查參考手冊。
Event類有幾個常用的公共屬性:
是否冒泡:bubbles; 目標物件:target; 所處階段:eventPhase; 當前物件:currentTarget; 從參考手冊可以event類的建構函式:
Event()建構函式publicfunctionEvent(type:String,bubbles:Boolean=false,cancelable:Boolean=false) 建立一個作為引數傳遞給事件偵聽器的Event物件。引數type:String—事件的型別,可以作為Event.type訪問。 bubbles:Boolean(default=false)—確定Event物件是否參與事件流的冒泡階段。預設值為false。 cancelable:Boolean(default=false)—確定是否可以取消Event物件。預設值為false。在flash.events包中可以看見系統自帶的事件。
Flex事件機制中如何自定義事件
自定義事件,也就是向監聽器傳遞自己定義的事件型別,同時可以通過事件傳遞引數。
1.建立自定義事件名稱的Event
dispatchEvent(newEvent(“myEvnet”,true,false));
2.建立自定義事件類
PublicclassMyEventextendsEvent{ .... }
dispatchEvent是EventDispatcher的方法:publicfunctiondispatchEvent(event:Event):Boolean將事件排程到事件流中。事件目標是對其呼叫dispatchEvent()方法的EventDispatcher物件。這句話就是說是哪個物件呼叫dispatchEvent(),那麼該事件就會被分發到那個物件的事件流中,如果沒有指明物件,那麼預設為this物件,即應用程式。這時該事件被分發到應用程式物件的事件流中,而沒有分發到特定物件的事件流中。一旦兩個物件的不是父子關係(控制元件樹),那麼事件流不會在這兩個物件之間有聯絡,那麼事件不會被響應;如果是,則還是要響應。(這種情況dispatchEvent的引數Event物件的引數必須是三個,如上)。dispatchEvent就是說明有了新的事件,只要註冊了該事件,就可以響應。
來源:xinem csdn.net
相關文章
- 重新認識flex縮寫屬性—[flex]Flex
- 認識彈性盒子flexFlex
- Android事件分發機制:基礎篇:最全面、最易懂Android事件
- 淺談JS事件機制與React事件機制JS事件React
- DOM事件機制事件
- redis事件機制Redis事件
- react事件機制React事件
- 如何全面認識物聯網路卡
- Redis的事件機制Redis事件
- View事件機制分析View事件
- JS的事件物件與事件機制JS事件物件
- JavaScript執行緒機制與事件機制JavaScript執行緒事件
- 全面認識資料指標體系指標
- 深入淺出Android事件分發機制:最全面最易懂:基礎篇(一)Android事件
- Spring事件機制詳解Spring事件
- Redis 事件機制詳解Redis事件
- JavaScript事件迴圈機制JavaScript事件
- Android事件分發機制Android事件
- JS 事件機制 Event LoopJS事件OOP
- Qt 事件機制 學習QT事件
- 【React深入】React事件機制React事件
- JavaScript 事件迴圈機制JavaScript事件
- Android全面解析之Window機制Android
- Android全面解析之Context機制AndroidContext
- JavaScript事件機制——記一次認真準備的技術分享JavaScript事件
- jQuery的事件機制,事件物件介紹,外掛機制,多庫共存,each()jQuery事件物件
- Android10_原理機制系列_事件傳遞機制Android事件
- 帶你全面認識CMMI V2.0(二)
- 透過認識AI智慧機器人的功能,全面瞭解電話機器人AI機器人
- js--事件迴圈機制JS事件
- redis的事件處理機制Redis事件
- 18.spring系列- 事件機制Spring事件
- [譯]談談SpringBoot 事件機制Spring Boot事件
- Zookeeper watcher 事件機制原理剖析事件
- View事件分發機制分析View事件
- javascript事件迴圈機制EventLoopJavaScript事件OOP
- javascript之事件迴圈機制JavaScript事件
- 深入理解DOM事件機制事件
- React原始碼分析 – 事件機制React原始碼事件