Упрощенный код:
//triggered on MouseEvent.MOUSE_DOWN
private function beginDrag(e:MouseEvent):void
{
stage.addEventListener(MouseEvent.MOUSE_MOVE, drag);
stage.addEventListener(MouseEvent.MOUSE_UP, endDrag);
stage.addEventListener(Event.DEACTIVATE, endDrag);
contextMenu.addEventListener(ContextMenuEvent.MENU_SELECT, endDrag);
}
private function drag(e:MouseEvent):void
{
//do stuff
}
private function endDrag(e:Event):void
{
stage.removeEventListener(MouseEvent.MOUSE_MOVE, drag);
stage.removeEventListener(MouseEvent.MOUSE_UP, endDrag);
stage.removeEventListener(Event.DEACTIVATE, endDrag);
contextMenu.removeEventListener(ContextMenuEvent.MENU_SELECT, endDrag);
}
Я использую несколько техник щелчка и перетаскивания в моем флеш-коде, и я заметил некоторые лазейки с событием MOUSE_UP:
- оно не будет запущено, если контекстное меню активировано, когда мышь еще нажата.
- оно не будет запущено, если окно деактивировано (alt + tab или аналогичное)
Мой вопрос таков: какие другие события могут прервать событие MOUSE_UP и привести к неожиданному поведению?
Кроме того, существует ли способ общего перехвата ContextMenuEvent.MENU_SELECT для все контекстные меню без необходимости вручную добавлять / удалять слушателей для каждого контекстного меню?