在MouseEvent.MOUSE_DOWN之后取消MouseEvent.CLICK

时间:2011-08-11 17:12:51

标签: actionscript-3 events stoppropagation

我有一个MOUSE_DOWN处理程序,它在子对象上创建一个CLICK事件监听器。当然,只要释放鼠标按钮,如果碰巧在子对象上,就会触发CLICK事件。

我很失望地发现event.stopImmediatePropagation不会在注意MOUSE_DOWN作为其检测周期的一部分时中断CLICK事件。它有意义但它仍然......令人失望。

MouseEvent.CLICK包括检测对象上的MOUSE_DOWN,然后如果它后面跟着MOUSE_UP而不离开对象,则会触发事件。我曾希望通过取消MOUSE_DOWN事件,它会清除CLICK缓冲区,但没有这样的土豆,唉。

那里有什么诡计?这可能都是用一个标志和几个MOUSE_UP和MOUSE_DOWN处理程序来处理的,但dang,一点点的努力...... Buehler?

2 个答案:

答案 0 :(得分:1)

如果我理解正确,您能够通过以下方式纠正此行为:

而不是MOUSE_DOWN处理程序,有一个CLICK处理程序。

该CLICK处理程序将删除与其关联的侦听器,并创建一个 new CLICK侦听器,并引用您希望成为新CLICK处理程序的函数。

IE:

//on CreationComplete, or wherever you are adding the MOUSE_DOWN listener
addEventListener(MouseEvent.CLICK, handler1);

private function handler1(aEvent:MouseEvent):void
{
    removeEventListener(MouseEvent.CLICK, handler1);
    addEventListener(MouseEvent.CLICK, handler2);
}

答案 1 :(得分:0)

停止事件的传播只会阻止事件流过显示列表,它不会反转时间并取消或取消注册事件。

ActionScript 3.0: The Event Flow

如果要取消事件,只需删除事件监听器。