尽管阅读了许多关于 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);
}
}