2011-08-08 114 views
0

我有一个MouseEvent.CLICK侦听器的按钮。当按下按钮时触发CLICK事件,鼠标在推出时关闭,然后在再次按下按钮时释放。我不希望发生这种情况,拖动按钮时不应发生点击事件。AS3:拖放按钮

我的Flash文件包含大量的按钮和点击侦听器,我想用尽可能少的代码来解决这个问题。这个问题最简单的解决方案是什么?

回答

3

您需要在需要时添加事件侦听器和处理程序,并在不再需要时删除它们。你会用自己的逻辑您的需求,但这里有一个例子:

button.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownEventHandler); 

function mouseDownEventHandler(evt:MouseEvent):void 
{ 
    evt.currentTarget.addEventListener(MouseEvent.MOUSE_UP, mouseUpEventHandler); 
    evt.currentTarget.addEventListener(MouseEvent.ROLL_OUT, rollOutEventHandler); 
    trace("Mouse Down"); 
} 

function mouseUpEventHandler(evt:MouseEvent):void 
{ 
    evt.currentTarget.removeEventListener(MouseEvent.MOUSE_UP, mouseUpEventHandler); 
    evt.currentTarget.removeEventListener(MouseEvent.ROLL_OUT, rollOutEventHandler); 
    trace("Mouse Click (Mouse Up)"); 
} 

function rollOutEventHandler(evt:MouseEvent):void 
{ 
    evt.currentTarget.removeEventListener(MouseEvent.MOUSE_UP, mouseUpEventHandler); 
    evt.currentTarget.removeEventListener(MouseEvent.ROLL_OUT, rollOutEventHandler); 
    trace("Roll Out"); 
} 

,如果你有很多它的行为方式相同的按钮,你应该创建一个自定义按钮,其中所有的按钮会实例。

+0

+1最后一点。 – Marty

1

在鼠标下方,记录鼠标坐标,在鼠标上做相同的操作并比较两个坐标。如果距离超过10px(或任何你想要的),则取消点击(或将布尔值设置为false,以允许点击侦听器中的代码运行)。

在按下鼠标,开始记录鼠标坐标,所以你知道剪辑已被移动,然后在鼠标弹起时,你知道,如果剪辑已被移动,即使用户将剪辑回完全一样的地方。

+0

如果用户拖出按钮,然后巧合返回到他拖出的完全相同的坐标?你的解决方案非常简单,但我需要更好的东西。 – Abdulla

+0

@Abdulla,我编辑了我的答案。 – Griffin