![]() |
|
||||||||||
|
|||||
|
Регистрация: Jun 2011
Сообщений: 19
|
Всем привет.
В приложении при клике на кнопку необходимо показывать меню, которое исчезает только если выбрать пункт или кликнуть вне меню. При клике на кнопку, создаю объект меню и подписываюсь на событие глобального клика сцены, в обработчике которого я убираю меню. В таком виде меню уничтожается сразу же после создания. Добавил Event.StopPropagation() в событие клика по кнопке, прямо перед созданием объекта меню. Все почти идеально. Только вот кнопок в приложении много и если кликать на другие кнопки, то появляется много меню, которые закрываются все разом, если кликнуть где то в левом месте. Как быть? Подскажите. Пока на ум приходит все таки написание класса менеджера меню, который будет сам подписываться на клик по сцене и убирать все существующие менюшки. Но мне кажется это слишком. Да вообщем-то меню нужно что бы отображалось только одно. Кривовато объяснил проблему выше. |
|
|||||
|
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
Можно "дослушивать" событие-эхо клика, приходящее от стейджа, и уже по нему вешать на стейдж слушатель следующего клика ("настоящий" обработчик для закрытия меню).
Останавливать событие в этом случае не надо, и остальные кнопки будут исправно его получать. С остановкой событий вообще надо быть осторожнее. Мало ли кому они будут интересны)) //... button.addEventListener(MouseEvent.CLICK, handlerButtonClick); super.addChild(button); } private function handlerEcho(event:MouseEvent):void { stage.removeEventListener(MouseEvent.CLICK, handlerEcho); stage.addEventListener(MouseEvent.CLICK, handlerStageClick); } private function handlerButtonClick(event:MouseEvent):void { _isOpen = !_isOpen; // флаг показа меню if (_isOpen) { stage.addEventListener(MouseEvent.CLICK, handlerEcho); // эхо от stage // показать меню } else { stage.removeEventListener(MouseEvent.CLICK, handlerStageClick); // скрыть меню } } private function handlerStageClick(event:MouseEvent):void { stage.removeEventListener(MouseEvent.CLICK, handlerStageClick); if (_isOpen) // скрыть меню; }
__________________
Reality.getBounds(this); Последний раз редактировалось Wolsh; 06.02.2013 в 00:09. Причина: пример кода |
|
|||||
|
Регистрация: Jun 2011
Сообщений: 19
|
большое человеческое спасибо)
|
![]() |
![]() |
Часовой пояс GMT +4, время: 23:02. |
|
|
« Предыдущая тема | Следующая тема » |
|
|