我正在將一個小軟件原型編程爲Flash/Actionscript3應用程序。目前,我在舞臺上註冊了一些事件 - 但由於stopPropoagation()需要始終使用,所以很麻煩。在AS3舞臺登記活動的替代方案?
作爲示例: 我有一個元素顯示通過mouseclick would和關閉舞臺上的菜單事件。如果不使用stopPropagation,菜單會立即打開並關閉。隱藏函數註冊在一些對象上,所以只是檢查target = stage是不是不幸的。
有沒有什麼好的解決方案來解決這個問題?
我正在將一個小軟件原型編程爲Flash/Actionscript3應用程序。目前,我在舞臺上註冊了一些事件 - 但由於stopPropoagation()需要始終使用,所以很麻煩。在AS3舞臺登記活動的替代方案?
作爲示例: 我有一個元素顯示通過mouseclick would和關閉舞臺上的菜單事件。如果不使用stopPropagation,菜單會立即打開並關閉。隱藏函數註冊在一些對象上,所以只是檢查target = stage是不是不幸的。
有沒有什麼好的解決方案來解決這個問題?
因此,當你點擊一個'元素'時,你在舞臺上有一個MOUSE_CLICK的監聽器。
這看起來有點像:
addEventListener(MouseEvent.CLICK, onClick)
function onClick(e:MouseEvent)
{
trace("CLICK")
}
mc.addEventListener(MouseEvent.CLICK, onMcClick)
function onMcClick(e:MouseEvent)
{
trace("mc")
e.stopPropagation();
}
如果那是的話,那麼是的,階段總會收到此事件,因爲它與原生的Flash事件是如何傳播完成和泡沫做的。 http://www.adobe.com/devnet/actionscript/articles/event_handling_as3_03.html
而不是傾聽舞臺,並不得不打電話給stopPropogation你可以重構你的代碼。你將需要刪除舞臺上的監聽器,而是把它添加到實際的項目,以便:
mc2.addEventListener(MouseEvent.CLICK, onClick)
function onClick(e:MouseEvent)
{
trace("CLICK")
}
mc.addEventListener(MouseEvent.CLICK, onMcClick)
function onMcClick(e:MouseEvent)
{
trace("MC 2 CLICK")
}
當然,這可能會然後要求你改變你的一些其他的代碼,但因爲我不能看到它,我我不確定那是什麼。只要記住事件傳播和泡沫。所以如果你在舞臺上有一個movieclip'b'裏面有一個movieclip'c',並且c和b都有一個MOUSE_CLICK的監聽器,那麼如果你點擊c,那麼b和c事件都會收到這個事件,顯示列表。但是,如果c不在b中,但c在舞臺上,而b在舞臺上,那麼這將不會發生,因爲b不在c的鼓泡路徑上。希望有所幫助:)
1解決方案是檢查stage.focus,也就是說,如果菜單打開時焦點在其上,則可以添加焦點輸出事件偵聽器,以便在單擊舞臺並且菜單失去焦點時它將關閉。
一些代碼請! – bhups 2010-02-01 10:34:31
「我正在通過鼠標點擊顯示一個元素,並在舞臺上關閉菜單的事件」,抱歉,但我不明白你的問題。另請詳細說明stopPropoagation()是什麼。 「隱藏功能」,隱藏功能?嘗試以更容易理解的方式發佈您的問題:) – Tom 2010-02-01 10:49:06