Согласно спецификации 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); }