Я возвращаюсь к Flex / AIR после некоторого отсутствия, так что это может быть очень простой вопрос.
У меня есть настольное приложение AIR на основе окна. У него есть функция типа боковой панели / панели управления, которая скрыта до тех пор, пока пользователь не переместит курсор мыши X на ‹5 пикселей в левой части сцены / окна. Затем, если отображается боковая панель, она скрывается, если пользователь перемещает указатель мыши X на> 220. Просто.
Я столкнулся с глупой проблемой, когда пользователь может слишком быстро переместить мышь влево, пройти мимо левой части окна, и моя процедура открытия боковой панели не вызывается. Я пробовал использовать ENTER_FRAME, MOUSE_MOVE и MOUSE_OUT, по отдельности и в комбинации, но по-прежнему очень легко заставить рутину боковой панели выйти из строя.
this.stage.addEventListener(Event.ENTER_FRAME, controlPanelDisplayHandler);
this.stage.addEventListener(MouseEvent.MOUSE_MOVE, controlPanelDisplayHandler);
this.stage.addEventListener(MouseEvent.MOUSE_OUT, controlPanelDisplayHandler);
В моей процедуре отображения / скрытия боковой панели я вижу следы, скажем, события ENTER_FRAME, но оно содержит последнюю позицию mouseX, о которой он знал до того, как мышь покинула окно, а не текущую позицию мыши в прямоугольнике рабочего стола.
Кажется, я припоминаю, что здесь была некоторая проблема безопасности, но это было довольно давно. Может ли кто-нибудь предложить способ выполнения этой простой функции?
private function controlPanelDisplayHandler(event:Event):void
{
trace("mouseX" + this.stage.mouseX);
if (sidebarDisplayed == false){
if (mouseX <= 5){
sidebarDisplayed = true;
showSidebar();
}
} else if (sidebarDisplayed == true){
if (mouseX >= 240){
sidebarDisplayed = false;
hideSidebar();
}
}