Обрабатывать onTouchDown в мобильном браузере и onMouseDown на настольном компьютере / ноутбуке? - PullRequest
0 голосов
/ 10 января 2012

Я разрабатываю приложение для веб-игр с HTML5-холстом, который должен реагировать на события «щелчка» (в общем смысле).

На мобильной платформе (или сенсорной) это означает реакцию на onTouchDown, на платформе настольного компьютера / ноутбука (с помощью мыши или планшета), что означает реакцию на onMouseDown.

Проблема в том, что если я обработаю оба события, то иногда один и тот же «щелчок» приводит к тому, что оба события запускаются, поэтому я получаю двойную сигнализацию.

Какой лучший способ справиться с этим?

В настоящее время при первом полученном событии касания я отключаю события мыши, но это может быть немного сложным, если платформа поддерживает как касание, так и щелчки мышью (например, планшет Android с подключенной клавиатурой / клавиатурой / мышью)

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

Я смотрел на обнаружение пользовательского агента, но это кажется довольно хрупким (многие пользовательские агенты там) и не решает случаи, когда у платформы есть и сенсорная панель, и мышь / клавиатура.

1 Ответ

1 голос
/ 10 января 2012

Возможно сочетание вашего предложения:

Измерение задержки между касанием и щелчком, чтобы игнорировать щелчок после касания, работает не слишком хорошо, поскольку существуют обстоятельства, когда пользователь может касаться / щелкать с высокой частотой, поэтому слишком большая задержка приводит к отбрасыванию двойных нажатий / щелчки, и слишком короткая задержка пропускает случайные двойные сигналы проскальзывания через

И обнаружение координат x, y касания уменьшит ложные срабатывания. Таким образом, если оба события (касание и нажатие), происходящие в последовательности, получили одинаковые координаты, они обрабатываются как одинаковые.

Или, может быть, позволить пользователю переключаться (через экран какого-либо вида настроек), если он хочет использовать мышь или сенсорное устройство для своего устройства, если оба поддерживаются. Покажите предупреждающее сообщение, например, говорящее you're on a touch device so we enabled touch events, if you're using a mouse please see options или что-то подобное.

Большинство пользователей были бы довольны автоматическим выбором, и все недовольные могут изменить его.

...