Я пытаюсь заставить некоторые из моих библиотек работать с сенсорными устройствами, но мне трудно найти способы, как они поддерживаются и как они работают.
В принципе, есть 5 событий касания, но, похоже, существует консенсус среди мобильных браузеров только в событии touchstart
(duh). Я создал fiddle в качестве тестового примера.
Я тестировал это на своей галактической ноте с Android 4 на борту, но вы также можете проверить связь с обозревателем рабочего стола.
Цель состоит в том, чтобы попытаться выяснить, как обрабатывать краны, двойные краны и длинные отводы. Ничего необычного.
В принципе, это то, что происходит:
Активный браузер Android не запускает события касания. Он просто пытается имитировать щелчки мыши с кранами, стреляя mousedown
, mouseup
и click
события последовательно, но двойные краны просто увеличивают и уменьшают страницу.
Chrome для Android запускает событие touchstart, когда палец касается экрана. Если он будет выпущен достаточно быстро, он запускает mousedown
, mouseup
, touchend
и, наконец, события click
.
В случае длительного касания примерно через полсекунды он срабатывает mousedown
и mouseup
, а touchend
при поднятии пальца без события click
в конце.
Если вы переместите свой палец, он несколько раз запускает событие touchmove
, затем он запускает событие touchcancel
, и после этого ничего не происходит, даже при событии touchend
при поднятии пальца.
Двойной щелчок вызывает функции увеличения/уменьшения масштаба, но по событию он дважды комбинирует комбинацию touchstart
- touchevent
, при этом события мыши не запускаются.
Firefox для Android правильно запускает событие touchstart
, а в случае коротких кратковременных срабатываний mousedown
, mouseup
, touchend
и click
впоследствии.
В случае длительного нажатия, он запускает события mousedown
, mouseup
и, наконец, touchend
. Это то же самое для Chrome для этих вещей.
Но если вы двигаете пальцем, если огонь touchmove
постоянно (как и следовало ожидать), но он не запускает событие touchleave
, когда палец покидает элемент с помощью прослушивателя событий и не запускает touchcancel
, когда палец выходит из окна просмотра браузера.
Для двойных кранов он ведет себя точно так же, как Chrome.
Opera Mobile делает то же самое в Chrome и Firefox для короткого нажатия, но в случае длительного нажатия активирует какую-то функцию совместного доступа, которую я действительно хочу отключить. Если вы переместите свой палец или дважды коснитесь, он будет вести себя так же, как Firefox.
Бета-версия Chrome работает обычным образом для кратковременных кранов, но в случае длинных кранов она больше не запускает событие mouseup
, просто touchstart
, а затем mousedown
через полсекунды, затем touchend
, когда палец поднят. Когда палец перемещается, теперь он ведет себя как Firefox и Opera Mobile.
В случае двойных кранов он не запускает события касания при масштабировании, но только при масштабировании.
Бета-версия Chrome показывает самое странное поведение, но я не могу жаловаться, так как это бета-версия.
Вопрос: существует ли простой способ поиска коротких кранов, длинных кранов и двойных кранов в наиболее распространенных браузерах сенсорных устройств?
Слишком плохо, что я не могу протестировать его на устройствах iOS с помощью Safari или IE для Windows Phone 7/Phone 8/RT, но если некоторые из вас могут, ваша обратная связь будет очень оценена.