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:
parent
494d68fe02
commit
7dd6335965
@ -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) {
|
||||||
|
Loading…
Reference in New Issue
Block a user