Отмена MouseEvent.CLICK после MouseEvent.MOUSE_DOWN - PullRequest
2 голосов
/ 11 августа 2011

У меня есть обработчик MOUSE_DOWN, который создает прослушиватель событий CLICK для дочернего объекта. Естественно, как только вы отпустите кнопку мыши, если вы окажетесь над дочерним объектом, сработает событие CLICK.

Я был разочарован, обнаружив, что event.stopImmediatePropagation не прерывает событие CLICK от регистрации MOUSE_DOWN как части его цикла обнаружения. Имеет смысл, что это не так, но все же ... разочаровывает.

MouseEvent.CLICK состоит из обнаружения MOUSE_DOWN на объекте, а затем, если за ним следует MOUSE_UP, не выходя из объекта, он генерирует событие. Я надеялся, что, отменив событие MOUSE_DOWN, он очистит его от буфера CLICK, но, увы, такой картошки нет.

Есть какие-нибудь хитрости? Все это может быть обработано с помощью флага и еще пары обработчиков MOUSE_UP и MOUSE_DOWN, но черт возьми, попахивает усилиями ... Бюлер?

Ответы [ 2 ]

1 голос
/ 11 августа 2011

Если я вас правильно понимаю, вы должны иметь возможность исправить это поведение следующим образом:

Вместо обработчика 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);
}
0 голосов
/ 11 августа 2011

остановка распространения события только останавливает прохождение события через список отображения, не меняет время и не отменяет и не отменяет регистрацию события.

ActionScript 3.0: поток событий

если вы хотите отменить событие, просто удалите прослушиватель событий.

...