Как предотвратить симулированные события мыши в мобильных браузерах? - PullRequest
10 голосов
/ 11 марта 2012

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

В iOS Safari это довольно просто - просто запустите на сервере touchnd:

jQuery(document).on('touchend', function(e) {
  // Do some logic      
  e.preventDefault();
});

Это довольно вменяемое. К сожалению, ни браузер Android по умолчанию, ни Dolfin не отменяют симуляцию мыши, используя эту технику. (Dolfin отменит mousedown, когда на устройстве touchstart будет запущен warnDefault, но это не очень полезно, потому что вы не знаете, какое действие палец выполнит при запуске touchstart.)

Есть ли какой-то другой способ условно, или даже не условно, запретить запуск имитируемых событий мыши?

[EDIT] * * +1010

Чтобы лучше понять проблему, я запустил таблицу совместимости сенсорных событий по адресу: http://labs.cruncher.ch/touch-events-compatibility-table/

1 Ответ

3 голосов
/ 11 марта 2012

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

1) Использовать флаги

Настройкалогические флаги в ваших обработчиках событий, такие как mouseIsDown или mouseIsMoving, могут быть установлены и проверены на события мыши и касания.Если пользователь щелкает мышью, примите это как событие мыши.Затем, если с ним происходит событие касания, не обращайте на него внимания.

2) Реализуйте только то, что необходимо

Что ж, в любом случае, это хорошая практика.Не беспокойтесь о добавлении событий touchmove и mousemove, если вам это не нужно.Это только усложнит поддержку кода.Изменить: Вероятно, следовало бы быть более конкретным: подумайте о переосмыслении вашего пользовательского интерфейса, если вам требуется более сложное отслеживание событий.

Наконец, не полагайтесь на списки конфигурации внешнего оборудования, поскольку они редко бывают «полностью» точными.

...