touch-events
Время для прочтения: 1 мин. 24 сек.

Кроссверсионная обработка touch-событий в Internet Explorer на Windows Phone

Согласно спецификации Touch Events существует всего четыре типа события:

  • touchstart
  • touchend
  • touchmove
  • touchcancel

Но и тут Internet Explorer отличился. Если IE11 хоть как-то стал следовать стандартам и рекомендациям W3C, то с IE9, IE10 еще хуже.

В них без вендорных префиксов не обойтись, да и названия самих событий отличаются:

Браузер touchstart touchend touchmove touchcancel
IE9 MSPointerDown MSPointerUp MSPointerMove MSPointerCancel
IE10 MSPointerDown MSPointerUp MSPointerMove MSPointerCancel
IE11 pointerDown pointerUp pointerMove pointerCancel

Соответственно, для кроссверсионной поддержки данных событий нужно написать нечто подобное:


if(window.navigator.pointerEnabled) {
// IE 11
  this.element.addEventListener("pointerDown", eventHandlerName, false);
  this.element.addEventListener("pointerMove", eventHandlerName, false);
  this.element.addEventListener("pointerUp", eventHandlerName, false);
	this.element.addEventListener("pointerCancel", eventHandlerName, false);
} else if (window.navigator.msPointerEnabled) {
// IE 10
  this.element.addEventListener("MSPointerDown", eventHandlerName, false);
  this.element.addEventListener("MSPointerMove", eventHandlerName, false);
  this.element.addEventListener("MSPointerUp", eventHandlerName, false);
	this.element.addEventListener("MSPointerCancel", eventHandlerName, false);
} else {
// Android, iOS и другие
  this.element.addEventListener("touchstart", eventHandlerName, false);
  this.element.addEventListener("touchmove", eventHandlerName, false);
  this.element.addEventListener("touchend", eventHandlerName, false);
	this.element.addEventListener("touchcancel", eventHandlerName, false);
}

Ссылки

Для вставки кода используйте HTML-теги
<pre><code class="php">ваш код</code></pre>

Добавить комментарий

Такой e-mail уже зарегистрирован. Воспользуйтесь формой входа или введите другой.

Вы ввели некорректные логин или пароль

Извините, для комментирования необходимо войти.

3 комментария

по хронологии
по рейтингу сначала новые по хронологии
Всеволод Шмыров

Почитал бы хоть про отличие pointer от touch. Совершенно другие события. Да и названия по стандарту в lower case

К сожалению, прочитал) Вопрос был в соотношению двух спецификаций в одно более-менее работающее решение. Lower Case чего? По ссылкам под статьей посмотрите официальные мануалы вендоров.

Всеволод Шмыров

http://www.w3.org/TR/pointerevents/#the-pointerover-event

pointerdown, а не pointerDown. Да и window.navigator.pointerEnabled уже был удален из спецификации.

Но это конечно придирки.

Все равно поведение разное - если нажать на элемент и вывести указатель за пределы, то в touch при отпускания пальца за пределами элемента поступит событие "touchend". В pointer такое поведение только при помощи capture можно воспроизвести.