![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
Столкнулся с тем, что достаточно большой процент пользователей в принципе не способен нажимать на кнопку мыши точечно (1 раз). Как минимум идет два нажатия, а иногда и целая серия.
Это вызывает генерацию потока событий MouseEvent.CLICK и, как следствие, необходимость обрабатывать этот поток. Сейчас я, как правило, отписываю кнопку от слушателя после первого нажатия, но потом нужно обратно все не забывать возвращать. Получается избыточный код, единственное назначение которого - ограничить активность некоторой части пользователей. Вот думаю, нельзя ли придумать такую кнопку, которая, скажем, любую серию кликов по ней, при условии, что интервал между кликами меньше 200мс (или 400мс), воспринимает как один клик? Событием DOUBLE_CLICK можно пожертвовать. В общем, хотелось бы узнать, нет ли у кого какого-нибудь системного решения. |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Timer в помощь.
Цитата:
|
|
|||||
|
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
как выяснилось, да )))
кроме шуток вопрос серьезный |
|
|||||
|
ну например
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'); } } } |
|
|||||
|
Регистрация: Sep 2009
Сообщений: 127
|
Тут надо сначала подумать, почему они это делают?
Я бы выделил три варианта: 1) Потому что идет загрузка какого-то элемента, и пользователи просто не знают, что делать. Это может быть не только загрузка, но и, например, отсылка запроса, или еще что-нибудь времяемкое. В этом случае, лучше всего все-таки удалять слушатель. (кстати, кода "избыточного" ИМХО будет меньше) 2) Потому что действительно промахнулся или делает что-то не то. Ну, например, нажимает десять раз на одну и ту же кнопку "просто так". Тут, я думаю, все зависит от назначения приложения, его целевой аудитории. Я лично ставлю прозрачный слой, если мне надо, чтобы определенное действие не начиналось, пока не закончится предыдущее. Но у меня интерфейсное приложение. 3) Ну тут чисто дизайнерская штука - у кнопки, на которую можно нажать, должно быть свойство buttonMode = true, и желательно, чтобы обрабатывались события MOUSE_OVER и MOUSE_DOWN, чтобы пользователь видел, что он нажимает кнопку. |
|
|||||
|
Регистрация: Nov 2009
Адрес: СПб
Сообщений: 2,236
|
Прежде всего они это делают просто потому что привыкли. ))
Я лично знаю людей, которые всегда нажимают дабл-кликом. derhab, видимо, да. |
|
|||||
|
Регистрация: Aug 2009
Адрес: UTC+2
Сообщений: 353
|
Ага, я тоже таких знаю. Это старые женщины в вязаных шерстяных колготках.
Сам видел, как одна такая держит мышку проводом к себе Попробуйте сами взять мышку большим и средним пальцем, чтобы провод от мышки проходил под рукой у вас, а указательный палец лежал на кнопке для клика. Надо быть гением, чтобы до такого додумаццо. Вопрос, кстати, на самом деле серьезный. Я проверил только что проект, над которым работаю. Он ведет себя некорректно, когда кликать дважды (не даблкликом) по кнопкам. Теперь придется решать эту задачу тоже ![]() Последний раз редактировалось Crenth; 14.02.2010 в 07:48. |
![]() |
![]() |
Часовой пояс GMT +4, время: 11:38. |
|
|
« Предыдущая тема | Следующая тема » |
|
|