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

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

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

Регистрация: May 2011
Сообщений: 76
По умолчанию Кнопка-модификатор значения - проблема в браузере.

Всем привет.
Есть задача:
Написать кнопку которая модифицирует значение в текстовом поле при: обычном клике, при зажимании кнопки мыши. В плеш флеере работает прекрасно.

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

Код AS3:
count_up_bt.addEventListener(MouseEvent.MOUSE_DOWN, countButtonMouseDown);
 
private function countButtonMouseDown(e:MouseEvent): void {
                                  trace("countButtonMouseDown");
			ModifyCountNumber(e);
			//Remove old listeners
			e.currentTarget.removeEventListener(MouseEvent.MOUSE_DOWN, countButtonMouseDown);
			//Add new listeners
			e.currentTarget.addEventListener(MouseEvent.MOUSE_OUT, countButtonMouseUp);
			e.currentTarget.addEventListener(MouseEvent.MOUSE_UP, countButtonMouseUp);			
			e.currentTarget.addEventListener(Event.ENTER_FRAME, countButtonEnterFrame);
 
		}
 
private function countButtonMouseUp(e:MouseEvent): void {
                                  trace("countButtonMouseUp");
			//Remove old listeners and reset couter;
			e.currentTarget.removeEventListener(MouseEvent.MOUSE_OUT, countButtonMouseUp);
			e.currentTarget.removeEventListener(MouseEvent.MOUSE_UP, countButtonMouseUp);			
			e.currentTarget.removeEventListener(Event.ENTER_FRAME, countButtonEnterFrame);
                                  trace("Removed EnterFrameEvent")
			enterFrameCounter = 0;
			//Add new listeners
			e.currentTarget.addEventListener(MouseEvent.MOUSE_DOWN, countButtonMouseDown);			
		}
 
var enterFrameCounter:uint = 0;
 
		private function countButtonEnterFrame(e:Event):void {
			//if counter uninitialized then initialize.
			if (enterFrameCounter == 0) {
				enterFrameCounter = 1;
			}
 
			if (enterFrameCounter == 6 || enterFrameCounter == 12 || enterFrameCounter == 18 || enterFrameCounter == 24) {
				ModifyCountNumber(e);
				enterFrameCounter++;
			} else if (enterFrameCounter == 25){
				enterFrameCounter = 1;
			} else {
				enterFrameCounter++;
			}
		}
 
ModifyCountNumber(e:Event):void {
Значение в некотором текстовом поле модицифируется на какое-то значение однажды
}

Пример трейса при 2 кликах сделанных не чаще чем через 1 сек.:

Removed EnterFrameEvent
countButtonMouseUp
countButtonMouseDown
Removed EnterFrameEvent
countButtonMouseUp
countButtonMouseDown

Пример трейса при 2 кликах сделанных не реже чем через 0.5 сек.:

countButtonMouseDown
Removed EnterFrameEvent
countButtonMouseUp
countButtonMouseDown
Removed EnterFrameEvent
countButtonMouseUp
countButtonMouseDown

(да, да в этом случае от куда-то генерируется 3 клика)

Вопрос: как избавится от этого бага?


Последний раз редактировалось searinox; 19.09.2011 в 18:57. Причина: Добавлен трейс
Старый 19.09.2011, 18:35
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 2  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Имеет смысл использовать таймер и некоторое пороговое значение для зажатия.

Цитата:
Код AS3:
private function countButtonEnterFrame(e:Event):void {
			//if counter uninitialized then initialize.
			if (enterFrameCounter == 0) {
				enterFrameCounter = 1;
			}
 
			if (enterFrameCounter == 6 || enterFrameCounter == 12 || enterFrameCounter == 18 || enterFrameCounter == 24) {
				ModifyCountNumber(e);
				enterFrameCounter++;
			} else if (enterFrameCounter == 25){
				enterFrameCounter = 1;
			} else {
				enterFrameCounter++;
			}
		}
Это вообще ад.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 19.09.2011, 18:51
searinox вне форума Посмотреть профиль Отправить личное сообщение для searinox Найти все сообщения от searinox
  № 3  
Ответить с цитированием
searinox

Регистрация: May 2011
Сообщений: 76
1. проблема не в этой функции, а в том что фрейм листенер не удаляется так как генерится новый кликовый ивент после 2 клика(в серии 2 быстрых клика).
2. Что тебе не нравится в моей функции? помоему она весьма элегантна, ну не считая метода реализации частоты инкрементирования.
З.Ы. Я модифицирую 1 массаг и покажу тривиальный трейс.
З.З.Ы. Еще раз напоминаю что в флеш плеере все работает прекрасно, проблемы начинаются при интеграции флеша в браузер и открытии страницы с ним с сервера.

Добавлено через 4 часа 10 минут
Возможно можно было бы сдлеать костыль если получать в этом фрейм ивенте инфу о том, нажата ли кнопка в данный момент или нет. Это если нету никаких более элегантных решений...

Добавлено через 18 часов 44 минуты
Ни у кого нету вариантов? Я уже замаялся с этой проблемой копатся, может у кого какието мысли возникли- поджелитесь, буду очень благодарен.
Также могу аметить что всего таких кнопок 6. К каждой из них крепится обработчик событий как в самой 1 строчке, дальше он с ними работает как с таргетами. Это может быть проблемой?


Последний раз редактировалось searinox; 19.09.2011 в 19:07.
Создать новую тему Ответ Часовой пояс GMT +4, время: 13:06.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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