我有一个带有MouseEvent.CLICK监听器的按钮。按下按钮时触发CLICK事件,滚动时鼠标按下,然后再次按下按钮时释放。我不希望发生这种情况,拖动按钮时不会发生click事件。
我的Flash文件包含大量按钮和点击监听器,我想用尽可能少的代码来解决这个问题。解决这个问题的最简单方法是什么?
答案 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>