Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   всплывающее меню (http://www.flasher.ru/forum/showthread.php?t=193958)

stasuss 05.02.2013 13:35

всплывающее меню
 
Всем привет.

Вопрос наверное банальный, но у меня не получается найти нормального решения.
В флешке при клике на кнопку, создается всплывающее меню, которое должно быть видно пока пользователь не кликнет на какой то пункт или не кликнет вне него.

Вот вопрос вызывает именно "не кликнет вне него". Не могу придумать как это сделать. Добавлять прослушку на самом верхнем уровне иерархии объектов имхо будет не очень удобно, потому что вокруг будет много кликабельных объектов и определять на чем именно был клик будет сложно. Еще есть мысль создать класс-менеджер таких всплывающих меню и передовать ему событие клика на сцене, но это по-моему вариант не лучше.

Есть ли какой то простой способ скрыть меню, при клике вне него (вот прямо как сделано на рабочем столе Windows)?

FlashRus 05.02.2013 13:43

Внутри меню слушать Event.ADDED_TO_STAGE.
Как только событие произошло, мы можем подписаться на MouseEvent.CLICK у DisplayObject#stage. Событие возникло - сворачиваем меню.
Тем самым, отпадает какая либа нужда в менеджере и кастомных сообщений из вне.

caseyryan 05.02.2013 13:57

Цитата:

Есть ли какой то простой способ скрыть меню, при клике вне него (вот прямо как сделано на рабочем столе Windows)?
Да, подписать stage на событие MouseEvent.MOUSE_UP и по нему прятать менюшку, если event.target не равно какому-то пункту меню

а я бы вообще создал класс пункта меню (он же по-любому будет как-то выглядеть), и в обработчике MOUSE_UP проверял бы
Код AS3:

private function onMouseUp(e:MouseEvent):void {
    if (!(e.target is MenuItem)) {
        hideMenu();
    } else {
        openMenu(e.target as MenuItem);
        hideMenu();
    }
}


stasuss 05.02.2013 14:03

спасибо за ответ. но я похоже совсем нуб. у меня меню совсем не появляется теперь.. похоже оно уничтожается сразу после создания..

вообщем дело в том что оно создается при клике на объект. и когда я регистрирую событие глобального клика, то оно сразу же и срабатывает. помогите пожалуйста(

вспомнил про Event.StopPropagation(), останавливаю в событии клика, перед созданием объекта меню. Все хорошо, не считая того что у меня несколько объектов, при клике на которые создаются менюшки. И такой способ не убирает меню, если кликнуть по другому объекту, который просто создает второе меню.

Добавлено через 54 минуты
никто не подскажет?


Часовой пояс GMT +4, время: 16:50.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.