我已经创建了一个带有标题栏的简单面板,并且我试图在MouseEvent.MOUSE_DOWN,MouseEvent.MOUSE_CLICK和MouseEvent.DOUBLE_CLICK之间共享标题栏。鼠标向下,面板可拖动,鼠标点击面板折叠并展开,鼠标双击面板隐藏。ActionScript - 使用多个鼠标事件显示对象?
我努力使这些全部与面板的标题栏精灵一起工作。鼠标向下时会激活点击,等等。是否可以在同一个对象上区分这些鼠标事件?
我忘了提,我是编程的AIR应用程序,因此,虽然我相信下面帕特里克的解决方案将针对定制拖放功能的常规.swf文件或一个工作,我真的不可以访问nativeWindow的startMove()函数。然而,我设法通过轮询nativeWindow的位置来共享面板的MOUSE_DOWN和MOUSE_CLICK事件之间的titleBar对象。
private function titleBarMouseDownEventHandler(evt:MouseEvent):void
{
windowCoords = new Point(stage.nativeWindow.x, stage.nativeWindow.y);
stage.nativeWindow.startMove();
}
private function titleBarClickEventHandler(evt:MouseEvent):void
{
if (stage.nativeWindow.x != windowCoords.x && stage.nativeWindow.y != windowCoords.y)
return;
//expand & collapse code
}
当然,我可以将它们全部发送到他们自己的监听器功能或检查哪个事件类型被激活,但问题是一个会引发另一个事件类型。例如:我将鼠标放在面板上将其拖动到新的位置,但是当我放开鼠标时,面板将展开/折叠,因为展开/折叠操作正在监听鼠标单击。我尝试删除mousedown的click事件监听器并在mouseup中重新添加它,但结果是click事件从未发生过。 – TheDarkIn1978 2010-09-22 14:50:31
您可能必须建立某种形式的优先级,假设您使用switch语句,使用event.type,第一个语句将优先 – PatrickS 2010-09-22 14:55:23
唯一我能想到的其他事情是使用定时器,但那会是超级贫民窟。 – TheDarkIn1978 2010-09-22 14:59:55