Изменение e.touches, e.targetTouches и e.changedTouches - PullRequest
55 голосов
/ 14 августа 2011

Допустим, я слушаю touchstart, touchmove и touchend на элементе body.

Дайте мне знать, если я ошибаюсь, но я думаю, что e.touches - это то же самое, что и e.targetTouches? Если да, то как e.changedTouches меняется в зависимости от них?

Я имею в виду, что одним прикосновением в данный момент я выбираю touchevent и анализирую его. По моему опыту все три сенсорных переменных одинаковы.

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

1 Ответ

183 голосов
/ 30 августа 2011

У нас есть следующие списки:

  • touches: список информации для каждого пальца, который в данный момент касается экрана
  • targetTouches: Подобны касаниям, но отфильтрованы только для информации касаний пальцев, которые начинались в том же узле
  • changedTouches: список информации для каждого пальца, участвующего в событии

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

  • Когда я опущу палец, все три списка будут иметь одинаковую информацию. Это будет в changedTouches, потому что нажатие на палец - вот что вызвало событие
  • Когда я опущу второй палец, у touches будет два предмета, по одному на каждый палец. targetTouches будет иметь два элемента, только если палец был помещен в тот же узел, что и первый палец. changedTouches будет иметь информацию, касающуюся второго пальца, потому что именно это вызвало событие
  • Если я положу два пальца в одно и то же время, в changedTouches может быть два элемента, по одному на каждый палец
  • Если я двигаю пальцами, единственный список, который изменится, это changedTouches и будет содержать информацию, касающуюся того, сколько пальцев сместилось (хотя бы один).
  • Когда я подниму палец, он будет удален из touches, targetTouches и появится в changedTouches, поскольку именно он вызвал событие
  • Удаление моего последнего пальца оставит touches и targetTouches пустыми, а changedTouches будет содержать информацию для последнего пальца
...