Форум 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=193982)

stasuss 05.02.2013 20:25

скрытие объекта
 
Всем привет.

В приложении при клике на кнопку необходимо показывать меню, которое исчезает только если выбрать пункт или кликнуть вне меню.
При клике на кнопку, создаю объект меню и подписываюсь на событие глобального клика сцены, в обработчике которого я убираю меню.

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

Как быть? Подскажите. Пока на ум приходит все таки написание класса менеджера меню, который будет сам подписываться на клик по сцене и убирать все существующие менюшки. Но мне кажется это слишком.

Да вообщем-то меню нужно что бы отображалось только одно. Кривовато объяснил проблему выше.

dimarik 05.02.2013 22:29

Создайте раз один раз меню, а по нажатию кнопок добавляйте его в дисплейлист в нужном месте, в контесте нажатой кнопки.

Wolsh 05.02.2013 23:49

Можно "дослушивать" событие-эхо клика, приходящее от стейджа, и уже по нему вешать на стейдж слушатель следующего клика ("настоящий" обработчик для закрытия меню).
Останавливать событие в этом случае не надо, и остальные кнопки будут исправно его получать. С остановкой событий вообще надо быть осторожнее. Мало ли кому они будут интересны))

Код AS3:

                //...
                        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) // скрыть меню;
                }


stasuss 06.02.2013 08:34

большое человеческое спасибо)


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

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