initial commit
This commit is contained in:
98
node_modules/hammerjs/src/input/touch.js
generated
vendored
Normal file
98
node_modules/hammerjs/src/input/touch.js
generated
vendored
Normal file
@@ -0,0 +1,98 @@
|
||||
var TOUCH_INPUT_MAP = {
|
||||
touchstart: INPUT_START,
|
||||
touchmove: INPUT_MOVE,
|
||||
touchend: INPUT_END,
|
||||
touchcancel: INPUT_CANCEL
|
||||
};
|
||||
|
||||
var TOUCH_TARGET_EVENTS = 'touchstart touchmove touchend touchcancel';
|
||||
|
||||
/**
|
||||
* Multi-user touch events input
|
||||
* @constructor
|
||||
* @extends Input
|
||||
*/
|
||||
function TouchInput() {
|
||||
this.evTarget = TOUCH_TARGET_EVENTS;
|
||||
this.targetIds = {};
|
||||
|
||||
Input.apply(this, arguments);
|
||||
}
|
||||
|
||||
inherit(TouchInput, Input, {
|
||||
handler: function MTEhandler(ev) {
|
||||
var type = TOUCH_INPUT_MAP[ev.type];
|
||||
var touches = getTouches.call(this, ev, type);
|
||||
if (!touches) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.callback(this.manager, type, {
|
||||
pointers: touches[0],
|
||||
changedPointers: touches[1],
|
||||
pointerType: INPUT_TYPE_TOUCH,
|
||||
srcEvent: ev
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* @this {TouchInput}
|
||||
* @param {Object} ev
|
||||
* @param {Number} type flag
|
||||
* @returns {undefined|Array} [all, changed]
|
||||
*/
|
||||
function getTouches(ev, type) {
|
||||
var allTouches = toArray(ev.touches);
|
||||
var targetIds = this.targetIds;
|
||||
|
||||
// when there is only one touch, the process can be simplified
|
||||
if (type & (INPUT_START | INPUT_MOVE) && allTouches.length === 1) {
|
||||
targetIds[allTouches[0].identifier] = true;
|
||||
return [allTouches, allTouches];
|
||||
}
|
||||
|
||||
var i,
|
||||
targetTouches,
|
||||
changedTouches = toArray(ev.changedTouches),
|
||||
changedTargetTouches = [],
|
||||
target = this.target;
|
||||
|
||||
// get target touches from touches
|
||||
targetTouches = allTouches.filter(function(touch) {
|
||||
return hasParent(touch.target, target);
|
||||
});
|
||||
|
||||
// collect touches
|
||||
if (type === INPUT_START) {
|
||||
i = 0;
|
||||
while (i < targetTouches.length) {
|
||||
targetIds[targetTouches[i].identifier] = true;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
// filter changed touches to only contain touches that exist in the collected target ids
|
||||
i = 0;
|
||||
while (i < changedTouches.length) {
|
||||
if (targetIds[changedTouches[i].identifier]) {
|
||||
changedTargetTouches.push(changedTouches[i]);
|
||||
}
|
||||
|
||||
// cleanup removed touches
|
||||
if (type & (INPUT_END | INPUT_CANCEL)) {
|
||||
delete targetIds[changedTouches[i].identifier];
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
if (!changedTargetTouches.length) {
|
||||
return;
|
||||
}
|
||||
|
||||
return [
|
||||
// merge targetTouches with changedTargetTouches so it contains ALL touches, including 'end' and 'cancel'
|
||||
uniqueArray(targetTouches.concat(changedTargetTouches), 'identifier', true),
|
||||
changedTargetTouches
|
||||
];
|
||||
}
|
||||
Reference in New Issue
Block a user