2

我有一个 MOUSE_DOWN 处理程序,它在子对象上创建一个 CLICK 事件侦听器。自然,一旦您松开鼠标按钮,如果您碰巧在子对象上方,CLICK 事件就会触发。

我很失望地发现 event.stopImmediatePropagation 并没有中断 CLICK 事件将 MOUSE_DOWN 注册为检测周期的一部分。它没有但仍然......令人失望是有道理的。

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

有什么技巧吗?这一切都可以用一个标志和几个更多的 MOUSE_UP 和 MOUSE_DOWN 处理程序来处理,但是该死,有点努力...... Buehler?

4

2 回答 2

1

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

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

该 CLICK 处理程序将删除与其关联的侦听器,并创建一个的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);
}
于 2011-08-11T18:42:56.917 回答
0

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

ActionScript 3.0:事件流

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

于 2011-08-11T18:37:11.943 回答