|
|
|||||
Непостоянство MOUSE_LEAVE
Всем привет.
Мне нужно ловить событие, когда курсор выходит за пределы окна проектора. Использую MOUSE_LEAVE. Все нормально работает до тех пор, пока я в своем приложении не переключусь в полноэкранный режим и потом обратно. После этого MOUSE_LEAVE перестает срабатывать. Но стоит изменить размер окна мышкой, MOUSE_LEAVE снова в деле... Кто нибудь сталкивался с этим? Глюк? Компилирую через FlashBuilder. Mac OS 10.9.5 Подробно о том, что делаю: В программе есть менюшка, которая должна появляться при активности мыши (но только когда мышь находится в пределах окна программы). И при простое - скрываться вместе с курсором. Кстати, в конструкторе Mouse.hide тоже почему-то не срабатывает - только после первого MOUSE_OVER.. Очень странно.. public class MainMenu extends MainMenuSWC { private var _timerIdle:Timer; public function MainMenu() { visible = false; Mouse.hide(); if (stage) initMonitoringMouseMove(); else addEventListener(Event.ADDED_TO_STAGE, initMonitoringMouseMove); } private function initMonitoringMouseMove(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, initMonitoringMouseMove); stage.addEventListener(Event.MOUSE_LEAVE, onMouseLeaveHandler); stage.addEventListener(MouseEvent.MOUSE_OVER, onMouseOverHandler); _timerIdle = new Timer(2000); _timerIdle.addEventListener(TimerEvent.TIMER, onTimerIdleCompleteHandler); onMouseOverHandler(); } private function onMouseOverHandler(e:MouseEvent = null):void { stage.removeEventListener(MouseEvent.MOUSE_OVER, onMouseOverHandler); stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMoveHandler); } private function onMouseLeaveHandler(e:Event):void { stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMoveHandler); stage.addEventListener(MouseEvent.MOUSE_OVER, onMouseOverHandler); } private function onMouseMoveHandler(e:MouseEvent):void { visible = true; Mouse.show(); _timerIdle.delay = 2000; _timerIdle.start(); } private function onTimerIdleCompleteHandler(e:TimerEvent):void { _timerIdle.stop(); visible = false; Mouse.hide(); } public function destroy():void { removeEventListener(Event.ADDED_TO_STAGE, initMonitoringMouseMove); if (stage) { stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMoveHandler); stage.removeEventListener(MouseEvent.MOUSE_OVER, onMouseOverHandler); stage.removeEventListener(Event.MOUSE_LEAVE, onMouseLeaveHandler); } if (_timerIdle) { _timerIdle.stop(); _timerIdle.removeEventListener(TimerEvent.TIMER, onTimerIdleCompleteHandler); } } }
__________________
кто не отвечает, того garbage collector забирает Последний раз редактировалось djken; 07.04.2017 в 16:01. Причина: добавление листинга |
Часовой пояс GMT +4, время: 05:12. |
|
« Предыдущая тема | Следующая тема » |
|
|