Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 31.05.2011, 14:09
in4core вне форума Посмотреть профиль Отправить личное сообщение для in4core Найти все сообщения от in4core
  № 1  
Ответить с цитированием
in4core
 
Аватар для in4core

Регистрация: Mar 2009
Сообщений: 4,219
Записей в блоге: 14
По умолчанию Создание кнопки из 2х элементов и маскирование

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

Есть набор иконок скажем 5 штук, расположенных вертикально друг за другом. Чуть правее ситуация повторяется, но в этот раз не иконки, а текстовые кнопки. Кнопки находятся в контейнере, который может скрываться под маской ( заезжать и выезжать за столбик с иконками ). Так вот, нужно : чтобы при наведении на иконку выделялась не только она, но и текстовая кнопка рядом, а при наведении на кнопку текстовую - выделялась соотв ей иконка. Соотв при нажатии что на иконку, что на кнопку действия должны быть одинаковые.

Прилогаю схему :
Название: Безымянный44.png
Просмотров: 211

Размер: 13.6 Кб

Щас это реализовано в стиле

Код AS3:
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);
			}
		}
Определяем иконки, они лежать на сцене изначально.

Код AS3:
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));
		}
Иконочные события

Код AS3:
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);
		}
Текстовые поля создаю динамически

Код AS3:
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

Создать новую тему   Часовой пояс GMT +4, время: 22:14.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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