as3事件流機制徹底理解

2022-08-11 20:12:08 字數 1611 閱讀 4797

as3的事件流分三個階段:捕獲階段、目標階段、冒泡階段。如果記不住這三個階段的順序,想象以下捕魚的過程,捕魚也分三個階段:撒網、捕捉,撈起,三個階段從上向下。

為什麼要事件流要分三個階段呢?

這一切都是因為「顯示列表」,沒有顯示列表,也就不會有事件流。在顯示列表中,假設,s:舞台;c:容器;b:按鈕。

點選按鈕b,b應該發出click事件,這沒錯。從常識上來說,點選了b,也就間接點選了c吧,因為c包含b,那麼c也應該發出click事件,同理s也應該發出click事件。問題就來了,s、c、b發出click事件的順序該如何處理?

用盒子模型來理解,要想「摸東西」,肯定要從最外層的盒子開始摸起,層層向內摸,所以事件流的第一階段是捕獲階段,由外至內。接著就是目標階段。摸完東西,手就要縮回來,縮回來的過程就是冒泡階段。

捕獲階段和目標階段我們很容易理解,從外向內依次發出事件,那為什麼還要有冒泡階段呢?冒泡階段是為了滿足使用者靈活處理事件的需求而產生的。只有捕獲和目標階段,那麼使用者就必須先處理s的click事件,然後是c的click事件,最後才是b。但好多時候,使用者是想先處理b的click事件,然後才是c,最後是s,冒泡階段由此而生。

addeventlistener(type:string, listener:function, usecapture:boolean= false, priority:int= 0, useweakreference:boolean= false):void

用addeventlistener監聽事件,預設是目標階段或者冒泡階段,只有usecapture=true的時候,才是捕獲階段。b只有目標階段,s和c有捕獲和冒泡兩個階段。

function onclick(e:mouseevent):void

b.addeventlistener(mouseevent.click, onclick,  false); == e.currenttarget == b

b.addeventlistener(mouseevent.click, onclick,  true); //不會有任何效果。

c.addeventlistener(mouseevent.click, onclick,  false); ==  b,e.currenttarget == c

c.addeventlistener(mouseevent.click, onclick,  true); ==  b,e.currenttarget == c

s.addeventlistener(mouseevent.click, onclick,  false); ==  b,e.currenttarget == s

s.addeventlistener(mouseevent.click, onclick,  true); ==  b,e.currenttarget == s

注意,假如b.mousechildren=false; b.mouseenabled=false;那麼以上所有的事件都沒有效果了,因為沒有事件的生產者了。你會問,c不能生產事件嗎?不能,因為c是空白的,不能被點選。假如b不是按鈕,而是shape或者,那麼c就能產生事件了。因此,interactiveobject是通過事件流使父容器發出事件的,非interactiveobject是通過填充父容器,而使其直接發出事件。

記住,事件流因顯示列表而生,像捕魚一樣有三個階段:捕獲、目標、冒泡。

As3反射機制

取類名 傳進乙個object,返回類的全名 var loader urlloader new urlloader var classname string getqualifiedclassname loader trace classname displays flash.net.urlloade...

as3按鈕事件

在剛開始學as3時,如果不知道按鈕的事件如onpress的話,實在是件很沒有頭緒的事情。在 as3.0中,所有的時間都已經被event統一管理了.相對as2.0來說,按鈕事件是在as3中變動最大的事件.在as3.0中例如onpress等以前的按鈕事件寫法已經基本退出了歷史的舞台.取而代之的是統一的管...

as3按鈕事件

在剛開始學as3時,如果不知道按鈕的事件如onpress的話,實在是件很沒有頭緒的事情。在 as3.0中,所有的時間都已經被event統一管理了.相對as2.0來說,按鈕事件是在as3中變動最大的事件.在as3.0中例如onpress等以前的按鈕事件寫法已經基本退出了歷史的舞台.取而代之的是統一的管...