Filter touch events not to be handled.

In IE 10/11, MSPointer event is fired by mouse. It shouldn't be handled.

Also, Exception has occurred with event.targetTouches, and this commit
fixed it too.
This commit is contained in:
Hyunje Alex Jun 2014-10-24 11:26:54 +01:00
parent 494d68fe02
commit 7dd6335965

View File

@ -544,6 +544,7 @@
var speed = {}; var speed = {};
var breakingProcess = null; var breakingProcess = null;
var inGlobalTouch = false; var inGlobalTouch = false;
var inLocalTouch = false;
function globalTouchStart(e) { function globalTouchStart(e) {
inGlobalTouch = true; inGlobalTouch = true;
@ -560,23 +561,37 @@
return e.originalEvent; return e.originalEvent;
} }
} }
function touchStart(e) { function shouldHandle(e) {
var touch = getTouch(e); var event = e.originalEvent;
if (event.targetTouches && event.targetTouches.length === 1) {
startOffset.pageX = touch.pageX; return true;
startOffset.pageY = touch.pageY;
startTime = (new Date()).getTime();
if (breakingProcess !== null) {
clearInterval(breakingProcess);
} }
if (event.pointerType && event.pointerType !== 'mouse') {
return true;
}
return false;
}
function touchStart(e) {
if (shouldHandle(e)) {
inLocalTouch = true;
e.stopPropagation(); var touch = getTouch(e);
e.preventDefault();
startOffset.pageX = touch.pageX;
startOffset.pageY = touch.pageY;
startTime = (new Date()).getTime();
if (breakingProcess !== null) {
clearInterval(breakingProcess);
}
e.stopPropagation();
e.preventDefault();
}
} }
function touchMove(e) { function touchMove(e) {
if (!inGlobalTouch && e.originalEvent.targetTouches.length === 1) { if (!inGlobalTouch && inLocalTouch && shouldHandle(e)) {
var touch = getTouch(e); var touch = getTouch(e);
var currentOffset = {pageX: touch.pageX, pageY: touch.pageY}; var currentOffset = {pageX: touch.pageX, pageY: touch.pageY};
@ -601,18 +616,22 @@
} }
} }
function touchEnd(e) { function touchEnd(e) {
clearInterval(breakingProcess); if (!inGlobalTouch && inLocalTouch) {
breakingProcess = setInterval(function () { inLocalTouch = false;
if (Math.abs(speed.x) < 0.01 && Math.abs(speed.y) < 0.01) {
clearInterval(breakingProcess);
return;
}
applyTouchMove(speed.x * 30, speed.y * 30); clearInterval(breakingProcess);
breakingProcess = setInterval(function () {
if (Math.abs(speed.x) < 0.01 && Math.abs(speed.y) < 0.01) {
clearInterval(breakingProcess);
return;
}
speed.x *= 0.8; applyTouchMove(speed.x * 30, speed.y * 30);
speed.y *= 0.8;
}, 10); speed.x *= 0.8;
speed.y *= 0.8;
}, 10);
}
} }
if (supportsTouch) { if (supportsTouch) {