儘管閱讀了很多關於AS3的文章,並且實際上完成了真實世界的項目,但我仍然常常被簡單的事件處理任務困擾。防止舞臺接收發生在其他物體上的鼠標事件?
在當前的Flex項目中,用戶能夠創建基於自定義BorderContainer的類的實例,然後選擇並移動它們或調整它們的大小。我想添加一個事件偵聽器來檢測出現在背景BorderContainer(或舞臺)上的鼠標點擊,以便取消選擇當前選定的實例。
有人可以概述完成此步驟的步驟?我嘗試了所有我能想到的(啓用/禁用useCapture
,試圖比較event.target與event.currentTarget,嘗試測試eventPhase)。
我的項目是太複雜了職位,但與下面的簡單測試情況下,我得到下面的輸出,它是沒有任何意義對我說:結果是一樣的。
所以我的問題:如何檢測只發生在特定對象上的鼠標事件?
單擊定製使用BorderContainer一個實例:
----------stage click 1
stage is TARGET 1
----------stage click 1
stage is TARGET 1
-----------background click 1
background is currentTarget 1
-----------background click 3
background is currentTarget 3
----------stage click 3
stage is TARGET 3
----------stage click 3
stage is TARGET 3
點擊background
直接:
----------stage click 1
stage is TARGET 1
----------stage click 1
stage is TARGET 1
-----------background click 1
background is currentTarget 1
-----------background click 3
background is currentTarget 3
----------stage click 3
stage is TARGET 3
----------stage click 3
stage is TARGET 3
// --------------- ----
background.addEventListener(MouseEvent.CLICK, backgroundClick);
background.addEventListener(MouseEvent.CLICK, backgroundClick, true);
stage.addEventListener(MouseEvent.CLICK, stageClick);
stage.addEventListener(MouseEvent.CLICK, stageClick, true);
protected function backgroundClick(event:MouseEvent):void {
trace("-----------background click", event.eventPhase);
if (event.target == background){
trace("background is TARGET",event.eventPhase);
}
if (event.currentTarget == background){
trace("background is currentTarget",event.eventPhase);
}
}
protected function stageClick(event:MouseEvent):void {
trace("----------stage click",event.eventPhase);
if (event.target == stage){
trace("stage is currentTarget",event.eventPhase);
}
if (event.currentTarget == stage){
trace("stage is TARGET",event.eventPhase);
}
}