Время для прочтения: 1 мин. 41 сек.

Кроссверсионная обработка 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>

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

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

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

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

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

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

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

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