![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
[+4 06.05.14]
|
ВОобщем казалось бы тривиальная задача, как выполнить знаю, дело в другом - хочу хорошую реализацию, но не представляю как ее можно сделать. Описываю суть :
Есть набор иконок скажем 5 штук, расположенных вертикально друг за другом. Чуть правее ситуация повторяется, но в этот раз не иконки, а текстовые кнопки. Кнопки находятся в контейнере, который может скрываться под маской ( заезжать и выезжать за столбик с иконками ). Так вот, нужно : чтобы при наведении на иконку выделялась не только она, но и текстовая кнопка рядом, а при наведении на кнопку текстовую - выделялась соотв ей иконка. Соотв при нажатии что на иконку, что на кнопку действия должны быть одинаковые. Прилогаю схему : Щас это реализовано в стиле private function defineIcons():void { var i:int = 8; while ( i--> 1) { var $m:MovieClip = this['i' + i]; $m.buttonMode = true; $m.addEventListener(MouseEvent.MOUSE_OVER , onIconOver); $m.addEventListener(MouseEvent.MOUSE_OUT , onIconOut); $m.addEventListener(MouseEvent.CLICK , onIconClick); } } private function onIconOut(e:MouseEvent):void { e.currentTarget.filters = []; var name:String = e.currentTarget.name; var num:int = int(name.slice(1)) + 1; ( _glassMenu.getChildAt( num ) as Sprite ).dispatchEvent( new MouseEvent(MouseEvent.MOUSE_OUT)); } private function onIconOver(e:MouseEvent):void { e.currentTarget.filters = [ new GlowFilter(0xFFFF00, 0.52, 14, 14, 2, 3)]; var name:String = e.currentTarget.name; var num:int = int(name.slice(1)) + 1; ( _glassMenu.getChildAt( num ) as Sprite ).dispatchEvent( new MouseEvent(MouseEvent.MOUSE_OVER)); } private function defineMenu():void { for (var i:int = 0; i < _menuArray.length; i++) { var tf:TextField = DisplayText.addField('f_1', 15); tf.textColor = 0x330000; tf.text = _menuArray[i]; var sp:Sprite = getSimpleHiderSprite(tf.width, tf.height); sp.x = 35; sp.y = (tf.height + 7) * i + 17; sp.addChild(tf); sp.mouseChildren = false; sp.buttonMode = true; sp.addEventListener(MouseEvent.MOUSE_OVER , onMenuItemOver); sp.addEventListener(MouseEvent.MOUSE_OUT , onMenuItemOut); sp.addEventListener(MouseEvent.CLICK , onIconClick); _glassMenu.addChild(sp); } _glassMenu.closeButton.buttonMode = true; _glassMenu.closeButton.addEventListener(MouseEvent.CLICK , onClickCloseButton); } private function onMenuItemOut(e:MouseEvent):void { (e.currentTarget.getChildAt(0) as TextField).textColor = 0x330000; var indx:int = _glassMenu.getChildIndex(e.currentTarget as Sprite) - 1; this['i' + indx].filters = []; } private function onMenuItemOver(e:MouseEvent):void { (e.currentTarget.getChildAt(0) as TextField).textColor = 0x990000; var indx:int = _glassMenu.getChildIndex(e.currentTarget as Sprite) - 1; this['i' + indx].filters = [ new GlowFilter(0xFFFF00, 0.52, 14, 14, 2, 3)]; } Самой собой, такая дубовая реализация мне не по душе, это набросал для теста. Поэтому хочу узнать у вас, как тут сделать можно удобно?!
__________________
Марк Tween |
|
|||||
|
Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
|
Если заменить getChildAt, name, this['i' + indx] на массив, то можно сократить код в разы.
Я бы создал класс который получал бы ссылки на контейнеры для иконок и текстовых полей и в них создавал иконку и текстовое поле. Или давал сразу ссылки на иконку и текстовое поле. //class DoubleButton public function DoubleButton(){ } public function set icon(value:DisplayObject):void{ //... } public function set textField(value:TextField):void{ //... } private function rollOverHandler(event:MouseEvent):void{ //... } private function clickHandler(event:MouseEvent):void{ dispatchEvent(new Event("boubleButtonClicked", true)); } |
|
|||||
|
Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
|
Ну так кидайте ссылку на них.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 19:53. |
|
|
« Предыдущая тема | Следующая тема » |
|
|