iOS Задержка между touchstart и touchmove? - PullRequest
3 голосов
/ 20 марта 2012

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

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

Другие аспекты: Код написан в jquery, используя

  $(element).bind(touchmove, function(ev) {return myobject.DoTouch(ev) } 

где команда DoTouch просто проверяет ev.type, записывает позицию касания и возвращает false.

Любые идеи, что я должен искать, чтобы попытаться решить эту проблему? Разрыв между прикосновением и получением ответа от приложения очень раздражает.

1 Ответ

0 голосов
/ 27 апреля 2012

Да.Оказывается, так работает iOS.Некоторое время я вырывал свои собственные волосы.Подробнее здесь: http://developer.apple.com/library/ios/#DOCUMENTATION/AppleApplications/Reference/SafariWebContent/HandlingEvents/HandlingEvents.html. По сути, если iOS считает, что может обрабатывать это как внутренний жест PAN, она делает и даже не беспокоится об отправке события touchmove.

В моемВ ходе проекта я обнаружил, что если зритель делает жест касательного движения очень преднамеренно и делает паузу немного дольше, прежде чем поднять палец в конце движения, тогда событие touchmove фактически отправляется так, как можно было бы ожидать.Таким образом, задокументированное поведение может быть немного сомнительным по сравнению с реальностью, что только добавило путаницы и моих усилий по отладке.

В любом случае, если iOS обрабатывает событие внутренне как жест PAN, она отправит событие scrollдо touchend.В моем проекте я смог использовать это, чтобы установить флаг, который я использовал, чтобы различать жесты перетаскивания (которые обычно отправлялись в моем обработчике сенсорного перемещения) и игнорировать любое поведение в автономных обработчиках касаний, которые не были связаны с обработкой моего собственногообработка прокрутки.

Надеюсь, это поможет и вам (и другим)!

...