as3 rollOver or mouseOver使用說(shuō)明
2024-09-12 17:51:30
供稿:網(wǎng)友
所以當(dāng)監(jiān)聽MouseEvent.ROLL_OVER事件后,鼠標(biāo)移動(dòng)到panel的幾個(gè)按鈕時(shí),程序仍然認(rèn)為鼠標(biāo)懸停在panel上方。假設(shè)我們監(jiān)聽MouseEvent.MOUSE_OVER, 隨著鼠標(biāo)移到panel的按鈕上,程序立刻判斷鼠標(biāo)離開了panel,已經(jīng)到了按鈕上方――這個(gè)結(jié)果不是我們需要的,此時(shí)本應(yīng)去單擊按鈕,結(jié)果程序判斷鼠標(biāo)離開panel,會(huì)直接removeChild或者visible=false。
關(guān)于冒泡的話,不得不提AS3的事件流,簡(jiǎn)單的說(shuō)就是一個(gè)捕捉――目標(biāo)――冒泡的循環(huán)過(guò)程:事件發(fā)生后,先從顯示層中的根容器開始往下層級(jí)逐個(gè)捕捉直至到達(dá)派發(fā)事件的目標(biāo)對(duì)象后向上返回冒泡,而這一事件中的target屬性始終指向最內(nèi)層的派發(fā)事件目標(biāo),currentTarget則顧名思義指向事件流中當(dāng)前所在的對(duì)象。
事件發(fā)生后,從根節(jié)點(diǎn)到目標(biāo)節(jié)點(diǎn)的父節(jié)點(diǎn),這中間所有節(jié)點(diǎn)都有兩次機(jī)會(huì)可以響應(yīng)事件,分別在捕獲和冒泡階段。在事件流經(jīng)過(guò)的任意節(jié)點(diǎn)上注冊(cè)偵聽器都會(huì)觸發(fā)。當(dāng)然前提是打開了捕獲和冒泡功能。
默認(rèn)情況下,捕獲功能處于關(guān)閉狀態(tài),因?yàn)閷?shí)際開發(fā)中,監(jiān)聽目標(biāo)很明確,沒(méi)必要捕獲。
而事件只有在bubbles屬性為true時(shí)才進(jìn)行冒泡,默認(rèn)冒泡的事件包括:change,click,doubleClick,keyDown,keyUp,mouseDown,mouseUp。一旦捕獲打開,默認(rèn)的冒泡將被取消。
因此在同一個(gè)監(jiān)聽器中不能同時(shí)打開捕獲和冒泡,只能注冊(cè)兩個(gè)監(jiān)聽一個(gè)開捕獲一個(gè)開冒泡才行。
只有可視化對(duì)象(容器,控件)才有捕獲和冒泡階段,而像XML,WebService等非可視化對(duì)象只有目標(biāo)階段。
注冊(cè)偵聽器方法為:
addEventListener(type:String, listener:Function, useCapture:Boolean=false, priority:int=0, useWeakReference:Boolean=false)
useCapture即為是否打開捕獲功能,
priority為優(yōu)先級(jí)設(shè)定,當(dāng)有多個(gè)偵聽器時(shí),priority越大,優(yōu)先級(jí)越高越先調(diào)用,如果同級(jí)的話則按注冊(cè)的順序來(lái)調(diào)用。這里注意即使優(yōu)先級(jí)有先后也無(wú)法保證后一個(gè)偵聽調(diào)用執(zhí)行時(shí)前一個(gè)偵聽函數(shù)已執(zhí)行完畢。
useWeakReference為弱引用開關(guān),推薦設(shè)為true,便于垃圾自動(dòng)回收。但最規(guī)范的還是直接removeEventListener。注意當(dāng)注冊(cè)監(jiān)聽器打開了捕獲,則removeEventListener(type:String, listener:Function, useCapture:Boolean=false)的useCapture必須設(shè)為true,否則無(wú)效
事件對(duì)象的構(gòu)造方法為:
Event(type:String, bubbles:Boolean=false, cancelable:Boolean=false)
bubbles即為是否冒泡
cancelable為true時(shí)可以調(diào)用PreventDefault方法停止系統(tǒng)默認(rèn)的行為。比如輸入文本,默認(rèn)行為會(huì)馬上顯示在文本區(qū),當(dāng)cancelable為true時(shí)調(diào)用PreventDefault方法讓字符不出現(xiàn)。
另外,Event還有兩個(gè)方法可以停止事件流的繼續(xù)傳播,stopPropagation和stopImmediatePropagation,區(qū)別在于前者不會(huì)停止正在處理的對(duì)象。而后者還會(huì)停止同一object上的其他偵聽器。