![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: May 2011
Сообщений: 76
|
Всем привет.
Есть задача: Написать кнопку которая модифицирует значение в текстовом поле при: обычном клике, при зажимании кнопки мыши. В плеш флеере работает прекрасно. У меня следующая проблема: Когда флешка имбедится в браузер, если вместо обычного клика сделать двойной клик, то происходит эффект "залипания" и все происходит так, будто кнопка зажата. 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. Причина: Добавлен трейс |
|
|||||
|
Имеет смысл использовать таймер и некоторое пороговое значение для зажатия.
Цитата:
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку. |
|
|||||
|
Регистрация: May 2011
Сообщений: 76
|
1. проблема не в этой функции, а в том что фрейм листенер не удаляется так как генерится новый кликовый ивент после 2 клика(в серии 2 быстрых клика).
2. Что тебе не нравится в моей функции? помоему она весьма элегантна, ну не считая метода реализации частоты инкрементирования. З.Ы. Я модифицирую 1 массаг и покажу тривиальный трейс. З.З.Ы. Еще раз напоминаю что в флеш плеере все работает прекрасно, проблемы начинаются при интеграции флеша в браузер и открытии страницы с ним с сервера. Добавлено через 4 часа 10 минут Возможно можно было бы сдлеать костыль если получать в этом фрейм ивенте инфу о том, нажата ли кнопка в данный момент или нет. Это если нету никаких более элегантных решений... Добавлено через 18 часов 44 минуты Ни у кого нету вариантов? Я уже замаялся с этой проблемой копатся, может у кого какието мысли возникли- поджелитесь, буду очень благодарен. Также могу аметить что всего таких кнопок 6. К каждой из них крепится обработчик событий как в самой 1 строчке, дальше он с ними работает как с таргетами. Это может быть проблемой? Последний раз редактировалось searinox; 19.09.2011 в 19:07. |
![]() |
![]() |
Часовой пояс GMT +4, время: 13:06. |
|
|
« Предыдущая тема | Следующая тема » |
|
|