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

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

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

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
По умолчанию Борьба с многократным нажатием кнопки

Столкнулся с тем, что достаточно большой процент пользователей в принципе не способен нажимать на кнопку мыши точечно (1 раз). Как минимум идет два нажатия, а иногда и целая серия.

Это вызывает генерацию потока событий MouseEvent.CLICK и, как следствие, необходимость обрабатывать этот поток. Сейчас я, как правило, отписываю кнопку от слушателя после первого нажатия, но потом нужно обратно все не забывать возвращать. Получается избыточный код, единственное назначение которого - ограничить активность некоторой части пользователей.

Вот думаю, нельзя ли придумать такую кнопку, которая, скажем, любую серию кликов по ней, при условии, что интервал между кликами меньше 200мс (или 400мс), воспринимает как один клик? Событием DOUBLE_CLICK можно пожертвовать.

В общем, хотелось бы узнать, нет ли у кого какого-нибудь системного решения.

Старый 13.02.2010, 21:04
udaaff вне форума Посмотреть профиль Отправить личное сообщение для udaaff Найти все сообщения от udaaff
  № 2  
Ответить с цитированием
udaaff
...

модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
Timer в помощь.
Цитата:
Столкнулся с тем, что достаточно большой процент пользователей в принципе не способен нажимать на кнопку мыши точечно (1 раз). Как минимум идет два нажатия, а иногда и целая серия.
Они что, неврастеники у вас все?

Старый 13.02.2010, 21:16
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 3  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
как выяснилось, да )))

кроме шуток
вопрос серьезный

Старый 13.02.2010, 21:30
derhab вне форума Посмотреть профиль Отправить личное сообщение для derhab Найти все сообщения от derhab
  № 4  
Ответить с цитированием
derhab
 
Аватар для derhab

Регистрация: Apr 2001
Адрес: Berlin
Сообщений: 1,862
Отправить сообщение для derhab с помощью ICQ Отправить сообщение для derhab с помощью Skype™
ну например

Код AS1/AS2:
package 
{
     import flash.display.Sprite;
     import flash.events.MouseEvent;
     import flash.events.TimerEvent;
     import flash.utils.Timer;
 
     public class CustomButton extends Sprite
     {
          protected var _timer:Timer;
          protected var _clickAllowed:Boolean = true;
 
          public function CustomButton(delay:int = 500)
          {
               super();
 
               _timer = new Timer(delay);
 
               _timer.addEventListener(TimerEvent.TIMER, enableButton);
               addEventListener(MouseEvent.CLICK, clickHandler);
 
          }
 
          protected function enableButton(e:TimerEvent):void 
          {
               _clickAllowed = true;
               _timer.stop();
          }
 
          protected function clickHandler(e:MouseEvent):void 
          {
               if (!_clickAllowed) return;
               _clickAllowed = false;
               _timer.start();
               trace('clicked');
          }
 
     }
}
__________________
freelance | Раздор

Старый 13.02.2010, 23:17
ratin вне форума Посмотреть профиль Отправить личное сообщение для ratin Найти все сообщения от ratin
  № 5  
Ответить с цитированием
ratin
 
Аватар для ratin

Регистрация: Sep 2009
Сообщений: 127
Тут надо сначала подумать, почему они это делают?
Я бы выделил три варианта:

1) Потому что идет загрузка какого-то элемента, и пользователи просто не знают, что делать. Это может быть не только загрузка, но и, например, отсылка запроса, или еще что-нибудь времяемкое. В этом случае, лучше всего все-таки удалять слушатель. (кстати, кода "избыточного" ИМХО будет меньше)

2) Потому что действительно промахнулся или делает что-то не то. Ну, например, нажимает десять раз на одну и ту же кнопку "просто так". Тут, я думаю, все зависит от назначения приложения, его целевой аудитории. Я лично ставлю прозрачный слой, если мне надо, чтобы определенное действие не начиналось, пока не закончится предыдущее. Но у меня интерфейсное приложение.

3) Ну тут чисто дизайнерская штука - у кнопки, на которую можно нажать, должно быть свойство buttonMode = true, и желательно, чтобы обрабатывались события MOUSE_OVER и MOUSE_DOWN, чтобы пользователь видел, что он нажимает кнопку.

Старый 13.02.2010, 23:47
mikhailk вне форума Посмотреть профиль Отправить личное сообщение для mikhailk Найти все сообщения от mikhailk
  № 6  
Ответить с цитированием
mikhailk
 
Аватар для mikhailk

Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
Прежде всего они это делают просто потому что привыкли. ))
Я лично знаю людей, которые всегда нажимают дабл-кликом.

derhab, видимо, да.

Старый 14.02.2010, 07:46
Crenth вне форума Посмотреть профиль Отправить личное сообщение для Crenth Найти все сообщения от Crenth
  № 7  
Ответить с цитированием
Crenth
[+1 19.06.10]
[+1 27.07.10]
 
Аватар для Crenth

Регистрация: Aug 2009
Адрес: UTC+2
Сообщений: 353
Цитата:
Сообщение от mikhailk Посмотреть сообщение
Я лично знаю людей, которые всегда нажимают дабл-кликом.
Ага, я тоже таких знаю. Это старые женщины в вязаных шерстяных колготках.
Сам видел, как одна такая держит мышку проводом к себе
Попробуйте сами взять мышку большим и средним пальцем, чтобы провод от мышки проходил под рукой у вас, а указательный палец лежал на кнопке для клика. Надо быть гением, чтобы до такого додумаццо.

Вопрос, кстати, на самом деле серьезный. Я проверил только что проект, над которым работаю. Он ведет себя некорректно, когда кликать дважды (не даблкликом) по кнопкам.
Теперь придется решать эту задачу тоже


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

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

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


 


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


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