Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Борьба с многократным нажатием кнопки (http://www.flasher.ru/forum/showthread.php?t=136293)

mikhailk 13.02.2010 20:45

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

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

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

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

udaaff 13.02.2010 21:04

Timer в помощь.
Цитата:

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

mikhailk 13.02.2010 21:16

как выяснилось, да )))

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

derhab 13.02.2010 21:30

ну например

Код 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');
          }
 
    }
}


ratin 13.02.2010 23:17

Тут надо сначала подумать, почему они это делают?
Я бы выделил три варианта:

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

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

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

mikhailk 13.02.2010 23:47

Прежде всего они это делают просто потому что привыкли. ))
Я лично знаю людей, которые всегда нажимают дабл-кликом.

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

Crenth 14.02.2010 07:46

Цитата:

Сообщение от mikhailk (Сообщение 886236)
Я лично знаю людей, которые всегда нажимают дабл-кликом.

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

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


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

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