AS3:拖放按钮

时间:2011-08-08 00:04:20

标签: actionscript-3

我有一个带有MouseEvent.CLICK监听器的按钮。按下按钮时触发CLICK事件,滚动时鼠标按下,然后再次按下按钮时释放。我不希望发生这种情况,拖动按钮时不会发生click事件。

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

2 个答案:

答案 0 :(得分: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");
}

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

答案 1 :(得分:1)

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

在鼠标按下时,开始记录鼠标坐标,因此您知道剪辑已被移动,然后在鼠标向上时,即使用户将剪辑放回到完全相同的位置,您也知道剪辑是否已被移动。 / p>