Commit 447f6cfe by Touch it

Fix Touch events on Firefox and Chrome

Fix Touch events by subscribing to both mouse and touch events when
available.
Navigators fires only touch or mouse event so no performance
degradation.
parent e5048b7f
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -2692,19 +2692,31 @@ ...@@ -2692,19 +2692,31 @@
stopTouch = function () { stopTouch = function () {
return this.originalEvent.stopPropagation(); return this.originalEvent.stopPropagation();
}, },
getEventPosition = function (e) {
var scrollY = g.doc.documentElement.scrollTop || g.doc.body.scrollTop,
scrollX = g.doc.documentElement.scrollLeft || g.doc.body.scrollLeft;
return {
x: e.clientX + scrollX,
y: e.clientY + scrollY
};
},
addEvent = (function () { addEvent = (function () {
if (g.doc.addEventListener) { if (g.doc.addEventListener) {
return function (obj, type, fn, element) { return function (obj, type, fn, element) {
var realName = supportsTouch && touchMap[type] ? touchMap[type] : type, var f = function (e) {
f = function (e) { var pos = getEventPosition(e);
var scrollY = g.doc.documentElement.scrollTop || g.doc.body.scrollTop, return fn.call(element, e, pos.x, pos.y);
scrollX = g.doc.documentElement.scrollLeft || g.doc.body.scrollLeft, };
x = e.clientX + scrollX, obj.addEventListener(type, f, false);
y = e.clientY + scrollY;
if (supportsTouch && touchMap[has](type)) { if (supportsTouch && touchMap[type]) {
var _f = function (e) {
var pos = getEventPosition(e),
olde = e;
for (var i = 0, ii = e.targetTouches && e.targetTouches.length; i < ii; i++) { for (var i = 0, ii = e.targetTouches && e.targetTouches.length; i < ii; i++) {
if (e.targetTouches[i].target == obj) { if (e.targetTouches[i].target == obj) {
var olde = e;
e = e.targetTouches[i]; e = e.targetTouches[i];
e.originalEvent = olde; e.originalEvent = olde;
e.preventDefault = preventTouch; e.preventDefault = preventTouch;
...@@ -2712,12 +2724,19 @@ ...@@ -2712,12 +2724,19 @@
break; break;
} }
} }
}
return fn.call(element, e, x, y); return fn.call(element, e, pos.x, pos.y);
}; };
obj.addEventListener(realName, f, false);
obj.addEventListener(touchMap[type], _f, false);
}
return function () { return function () {
obj.removeEventListener(realName, f, false); obj.removeEventListener(type, f, false);
if (supportsTouch && touchMap[type])
obj.removeEventListener(touchMap[type], f, false);
return true; return true;
}; };
}; };
......
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment