pointer-event
Advanced tools
Comparing version 1.1.0 to 1.2.0
{ | ||
"name": "pointer-event", | ||
"version": "1.1.0", | ||
"version": "1.2.0", | ||
"title": "PointerEvent", | ||
@@ -5,0 +5,0 @@ "description": "Event Controller for mouse and touch interfaces", |
@@ -507,2 +507,85 @@ /* ================================================ | ||
} | ||
/** | ||
* Emulate `click` event via `touchend` event. | ||
* @param {Element} element - Target element, listeners that call `event.preventDefault()` are attached later. | ||
* @param {?number} moveTolerance - Move tolerance. | ||
* @param {?number} timeTolerance - Time tolerance. | ||
* @returns {Element} The passed `element`. | ||
*/ | ||
}, { | ||
key: "initClickEmulator", | ||
value: function initClickEmulator(element, moveTolerance, timeTolerance) { | ||
var DEFAULT_MOVE_TOLERANCE = 16, | ||
// px | ||
DEFAULT_TIME_TOLERANCE = 400; // ms | ||
var startX, startY, touchId, startMs; | ||
if (moveTolerance == null) { | ||
moveTolerance = DEFAULT_MOVE_TOLERANCE; | ||
} | ||
if (timeTolerance == null) { | ||
timeTolerance = DEFAULT_TIME_TOLERANCE; | ||
} | ||
/** | ||
* Get Touch instance in list. | ||
* @param {Touch[]} touches - An Array or TouchList instance. | ||
* @param {number} id - Touch#identifier | ||
* @returns {(Touch|null)} - A found Touch instance. | ||
*/ | ||
function getTouchById(touches, id) { | ||
if (touches != null && id != null) { | ||
for (var i = 0; i < touches.length; i++) { | ||
if (touches[i].identifier === id) { | ||
return touches[i]; | ||
} | ||
} | ||
} | ||
return null; | ||
} | ||
function getPointsLength(p0, p1) { | ||
var lx = p0.x - p1.x, | ||
ly = p0.y - p1.y; | ||
return Math.sqrt(lx * lx + ly * ly); | ||
} | ||
element.addEventListener('touchstart', function (event) { | ||
var touch = event.changedTouches[0]; | ||
startX = touch.clientX; | ||
startY = touch.clientY; | ||
touchId = touch.identifier; | ||
startMs = performance.now(); | ||
}); | ||
element.addEventListener('touchend', function (event) { | ||
var touch = getTouchById(event.changedTouches, touchId); | ||
if (typeof startX === 'number' && typeof startY === 'number' && typeof startMs === 'number' && touch && typeof touch.clientX === 'number' && typeof touch.clientY === 'number' && getPointsLength({ | ||
x: startX, | ||
y: startY | ||
}, { | ||
x: touch.clientX, | ||
y: touch.clientY | ||
}) <= moveTolerance && performance.now() - startMs <= timeTolerance) { | ||
// FIRE | ||
setTimeout(function () { | ||
element.dispatchEvent(new MouseEvent('click', { | ||
clientX: touch.clientX, | ||
clientY: touch.clientY | ||
})); | ||
}, 0); | ||
} | ||
startX = startY = touchId = startMs = null; | ||
}); | ||
element.addEventListener('touchcancel', function () { | ||
startX = startY = touchId = startMs = null; | ||
}); | ||
return element; | ||
} | ||
}]); | ||
@@ -509,0 +592,0 @@ |
@@ -412,2 +412,85 @@ /* ================================================ | ||
} | ||
/** | ||
* Emulate `click` event via `touchend` event. | ||
* @param {Element} element - Target element, listeners that call `event.preventDefault()` are attached later. | ||
* @param {?number} moveTolerance - Move tolerance. | ||
* @param {?number} timeTolerance - Time tolerance. | ||
* @returns {Element} The passed `element`. | ||
*/ | ||
}, { | ||
key: "initClickEmulator", | ||
value: function initClickEmulator(element, moveTolerance, timeTolerance) { | ||
var DEFAULT_MOVE_TOLERANCE = 16, | ||
// px | ||
DEFAULT_TIME_TOLERANCE = 400; // ms | ||
var startX, startY, touchId, startMs; | ||
if (moveTolerance == null) { | ||
moveTolerance = DEFAULT_MOVE_TOLERANCE; | ||
} | ||
if (timeTolerance == null) { | ||
timeTolerance = DEFAULT_TIME_TOLERANCE; | ||
} | ||
/** | ||
* Get Touch instance in list. | ||
* @param {Touch[]} touches - An Array or TouchList instance. | ||
* @param {number} id - Touch#identifier | ||
* @returns {(Touch|null)} - A found Touch instance. | ||
*/ | ||
function getTouchById(touches, id) { | ||
if (touches != null && id != null) { | ||
for (var i = 0; i < touches.length; i++) { | ||
if (touches[i].identifier === id) { | ||
return touches[i]; | ||
} | ||
} | ||
} | ||
return null; | ||
} | ||
function getPointsLength(p0, p1) { | ||
var lx = p0.x - p1.x, | ||
ly = p0.y - p1.y; | ||
return Math.sqrt(lx * lx + ly * ly); | ||
} | ||
element.addEventListener('touchstart', function (event) { | ||
var touch = event.changedTouches[0]; | ||
startX = touch.clientX; | ||
startY = touch.clientY; | ||
touchId = touch.identifier; | ||
startMs = performance.now(); | ||
}); | ||
element.addEventListener('touchend', function (event) { | ||
var touch = getTouchById(event.changedTouches, touchId); | ||
if (typeof startX === 'number' && typeof startY === 'number' && typeof startMs === 'number' && touch && typeof touch.clientX === 'number' && typeof touch.clientY === 'number' && getPointsLength({ | ||
x: startX, | ||
y: startY | ||
}, { | ||
x: touch.clientX, | ||
y: touch.clientY | ||
}) <= moveTolerance && performance.now() - startMs <= timeTolerance) { | ||
// FIRE | ||
setTimeout(function () { | ||
element.dispatchEvent(new MouseEvent('click', { | ||
clientX: touch.clientX, | ||
clientY: touch.clientY | ||
})); | ||
}, 0); | ||
} | ||
startX = startY = touchId = startMs = null; | ||
}); | ||
element.addEventListener('touchcancel', function () { | ||
startX = startY = touchId = startMs = null; | ||
}); | ||
return element; | ||
} | ||
}]); | ||
@@ -414,0 +497,0 @@ |
@@ -1,2 +0,2 @@ | ||
/*! PointerEvent v1.1.0 (c) anseki https://github.com/anseki/pointer-event */ | ||
var PointerEvent=function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t,n){"use strict";n.r(t);var r,o=[],a=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||function(e){return setTimeout(e,1e3/60)},i=window.cancelAnimationFrame||window.mozCancelAnimationFrame||window.webkitCancelAnimationFrame||window.msCancelAnimationFrame||function(e){return clearTimeout(e)},u=Date.now();function l(){var e,t;r&&(i.call(window,r),r=null),o.forEach((function(t){var n;(n=t.event)&&(t.event=null,t.listener(n),e=!0)})),e?(u=Date.now(),t=!0):Date.now()-u<500&&(t=!0),t&&(r=a.call(window,l))}function c(e){var t=-1;return o.some((function(n,r){return n.listener===e&&(t=r,!0)})),t}var s={add:function(e){var t;return-1===c(e)?(o.push(t={listener:e}),function(e){t.event=e,r||l()}):null},remove:function(e){var t;(t=c(e))>-1&&(o.splice(t,1),!o.length&&r&&(i.call(window,r),r=null))}};function d(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var f=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){f=!0}}))}catch(e){}function h(e,t,n,r){e.addEventListener(t,n,f?r:r.capture)}function v(e,t){if(null!=e&&null!=t)for(var n=0;n<e.length;n++)if(e[n].identifier===t)return e[n];return null}function p(e){return e&&"number"==typeof e.clientX&&"number"==typeof e.clientY}function m(e){e.preventDefault()}var w=function(){function e(t){var n=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.startHandlers={},this.lastHandlerId=0,this.curPointerClass=null,this.curTouchId=null,this.lastPointerXY={clientX:0,clientY:0},this.lastTouchTime=0,this.options={preventDefault:!0,stopPropagation:!0},t&&["preventDefault","stopPropagation"].forEach((function(e){"boolean"==typeof t[e]&&(n.options[e]=t[e])}))}var t,n,r;return t=e,r=[{key:"addEventListenerWithOptions",get:function(){return h}}],(n=[{key:"regStartHandler",value:function(e){var t=this;return t.startHandlers[++t.lastHandlerId]=function(n){var r,o,a="mousedown"===n.type?"mouse":"touch",i=Date.now();if("touch"===a)t.lastTouchTime=i,r=n.changedTouches[0],o=n.changedTouches[0].identifier;else{if(i-t.lastTouchTime<400)return;r=n}if(!p(r))throw new Error("No clientX/clientY");t.curPointerClass&&t.cancel(),e.call(t,r)&&(t.curPointerClass=a,t.curTouchId="touch"===a?o:null,t.lastPointerXY.clientX=r.clientX,t.lastPointerXY.clientY=r.clientY,t.options.preventDefault&&n.preventDefault(),t.options.stopPropagation&&n.stopPropagation())},t.lastHandlerId}},{key:"unregStartHandler",value:function(e){delete this.startHandlers[e]}},{key:"addStartHandler",value:function(e,t){if(!this.startHandlers[t])throw new Error("Invalid handlerId: ".concat(t));return h(e,"mousedown",this.startHandlers[t],{capture:!1,passive:!1}),h(e,"touchstart",this.startHandlers[t],{capture:!1,passive:!1}),h(e,"dragstart",m,{capture:!1,passive:!1}),t}},{key:"removeStartHandler",value:function(e,t){if(!this.startHandlers[t])throw new Error("Invalid handlerId: ".concat(t));return e.removeEventListener("mousedown",this.startHandlers[t],!1),e.removeEventListener("touchstart",this.startHandlers[t],!1),e.removeEventListener("dragstart",m,!1),t}},{key:"addMoveHandler",value:function(e,t,n){var r=this;function o(e){var t="mousemove"===e.type?"mouse":"touch";if("touch"===t&&(r.lastTouchTime=Date.now()),t===r.curPointerClass){var n="touch"===t?v(e.changedTouches,r.curTouchId):e;p(n)&&(n.clientX===r.lastPointerXY.clientX&&n.clientY===r.lastPointerXY.clientY||r.move(n),r.options.preventDefault&&e.preventDefault(),r.options.stopPropagation&&e.stopPropagation())}}var a=n?o:s.add(o);h(e,"mousemove",a,{capture:!1,passive:!1}),h(e,"touchmove",a,{capture:!1,passive:!1}),r.curMoveHandler=t}},{key:"move",value:function(e){p(e)&&(this.lastPointerXY.clientX=e.clientX,this.lastPointerXY.clientY=e.clientY),this.curMoveHandler&&this.curMoveHandler(this.lastPointerXY)}},{key:"addEndHandler",value:function(e,t){var n=this;function r(e){var t="mouseup"===e.type?"mouse":"touch";if("touch"===t&&(n.lastTouchTime=Date.now()),t===n.curPointerClass){var r="touch"===t?v(e.changedTouches,n.curTouchId)||(v(e.touches,n.curTouchId)?null:{}):e;r&&(n.end(r),n.options.preventDefault&&e.preventDefault(),n.options.stopPropagation&&e.stopPropagation())}}h(e,"mouseup",r,{capture:!1,passive:!1}),h(e,"touchend",r,{capture:!1,passive:!1}),n.curEndHandler=t}},{key:"end",value:function(e){p(e)&&(this.lastPointerXY.clientX=e.clientX,this.lastPointerXY.clientY=e.clientY),this.curEndHandler&&this.curEndHandler(this.lastPointerXY),this.curPointerClass=this.curTouchId=null}},{key:"addCancelHandler",value:function(e,t){var n=this;h(e,"touchcancel",(function(e){n.lastTouchTime=Date.now(),null!=n.curPointerClass&&(v(e.changedTouches,n.curTouchId)||!v(e.touches,n.curTouchId))&&n.cancel()}),{capture:!1,passive:!1}),n.curCancelHandler=t}},{key:"cancel",value:function(){this.curCancelHandler&&this.curCancelHandler(),this.curPointerClass=this.curTouchId=null}}])&&d(t.prototype,n),r&&d(t,r),e}();t.default=w}]).default; | ||
/*! PointerEvent v1.2.0 (c) anseki https://github.com/anseki/pointer-event */ | ||
var PointerEvent=function(e){var t={};function n(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)n.d(r,o,function(t){return e[t]}.bind(null,o));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t,n){"use strict";n.r(t);var r,o=[],i=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||function(e){return setTimeout(e,1e3/60)},a=window.cancelAnimationFrame||window.mozCancelAnimationFrame||window.webkitCancelAnimationFrame||window.msCancelAnimationFrame||function(e){return clearTimeout(e)},u=Date.now();function l(){var e,t;r&&(a.call(window,r),r=null),o.forEach((function(t){var n;(n=t.event)&&(t.event=null,t.listener(n),e=!0)})),e?(u=Date.now(),t=!0):Date.now()-u<500&&(t=!0),t&&(r=i.call(window,l))}function c(e){var t=-1;return o.some((function(n,r){return n.listener===e&&(t=r,!0)})),t}var s={add:function(e){var t;return-1===c(e)?(o.push(t={listener:e}),function(e){t.event=e,r||l()}):null},remove:function(e){var t;(t=c(e))>-1&&(o.splice(t,1),!o.length&&r&&(a.call(window,r),r=null))}};function d(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}var f=!1;try{window.addEventListener("test",null,Object.defineProperty({},"passive",{get:function(){f=!0}}))}catch(e){}function h(e,t,n,r){e.addEventListener(t,n,f?r:r.capture)}function v(e,t){if(null!=e&&null!=t)for(var n=0;n<e.length;n++)if(e[n].identifier===t)return e[n];return null}function p(e){return e&&"number"==typeof e.clientX&&"number"==typeof e.clientY}function m(e){e.preventDefault()}var w=function(){function e(t){var n=this;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.startHandlers={},this.lastHandlerId=0,this.curPointerClass=null,this.curTouchId=null,this.lastPointerXY={clientX:0,clientY:0},this.lastTouchTime=0,this.options={preventDefault:!0,stopPropagation:!0},t&&["preventDefault","stopPropagation"].forEach((function(e){"boolean"==typeof t[e]&&(n.options[e]=t[e])}))}var t,n,r;return t=e,r=[{key:"addEventListenerWithOptions",get:function(){return h}},{key:"initClickEmulator",value:function(e,t,n){var r,o,i,a;return null==t&&(t=16),null==n&&(n=400),e.addEventListener("touchstart",(function(e){var t=e.changedTouches[0];r=t.clientX,o=t.clientY,i=t.identifier,a=performance.now()})),e.addEventListener("touchend",(function(u){var l,c,s,d,f=function(e,t){if(null!=e&&null!=t)for(var n=0;n<e.length;n++)if(e[n].identifier===t)return e[n];return null}(u.changedTouches,i);"number"==typeof r&&"number"==typeof o&&"number"==typeof a&&f&&"number"==typeof f.clientX&&"number"==typeof f.clientY&&(l={x:r,y:o},c={x:f.clientX,y:f.clientY},s=l.x-c.x,d=l.y-c.y,Math.sqrt(s*s+d*d)<=t)&&performance.now()-a<=n&&setTimeout((function(){e.dispatchEvent(new MouseEvent("click",{clientX:f.clientX,clientY:f.clientY}))}),0),r=o=i=a=null})),e.addEventListener("touchcancel",(function(){r=o=i=a=null})),e}}],(n=[{key:"regStartHandler",value:function(e){var t=this;return t.startHandlers[++t.lastHandlerId]=function(n){var r,o,i="mousedown"===n.type?"mouse":"touch",a=Date.now();if("touch"===i)t.lastTouchTime=a,r=n.changedTouches[0],o=n.changedTouches[0].identifier;else{if(a-t.lastTouchTime<400)return;r=n}if(!p(r))throw new Error("No clientX/clientY");t.curPointerClass&&t.cancel(),e.call(t,r)&&(t.curPointerClass=i,t.curTouchId="touch"===i?o:null,t.lastPointerXY.clientX=r.clientX,t.lastPointerXY.clientY=r.clientY,t.options.preventDefault&&n.preventDefault(),t.options.stopPropagation&&n.stopPropagation())},t.lastHandlerId}},{key:"unregStartHandler",value:function(e){delete this.startHandlers[e]}},{key:"addStartHandler",value:function(e,t){if(!this.startHandlers[t])throw new Error("Invalid handlerId: ".concat(t));return h(e,"mousedown",this.startHandlers[t],{capture:!1,passive:!1}),h(e,"touchstart",this.startHandlers[t],{capture:!1,passive:!1}),h(e,"dragstart",m,{capture:!1,passive:!1}),t}},{key:"removeStartHandler",value:function(e,t){if(!this.startHandlers[t])throw new Error("Invalid handlerId: ".concat(t));return e.removeEventListener("mousedown",this.startHandlers[t],!1),e.removeEventListener("touchstart",this.startHandlers[t],!1),e.removeEventListener("dragstart",m,!1),t}},{key:"addMoveHandler",value:function(e,t,n){var r=this;function o(e){var t="mousemove"===e.type?"mouse":"touch";if("touch"===t&&(r.lastTouchTime=Date.now()),t===r.curPointerClass){var n="touch"===t?v(e.changedTouches,r.curTouchId):e;p(n)&&(n.clientX===r.lastPointerXY.clientX&&n.clientY===r.lastPointerXY.clientY||r.move(n),r.options.preventDefault&&e.preventDefault(),r.options.stopPropagation&&e.stopPropagation())}}var i=n?o:s.add(o);h(e,"mousemove",i,{capture:!1,passive:!1}),h(e,"touchmove",i,{capture:!1,passive:!1}),r.curMoveHandler=t}},{key:"move",value:function(e){p(e)&&(this.lastPointerXY.clientX=e.clientX,this.lastPointerXY.clientY=e.clientY),this.curMoveHandler&&this.curMoveHandler(this.lastPointerXY)}},{key:"addEndHandler",value:function(e,t){var n=this;function r(e){var t="mouseup"===e.type?"mouse":"touch";if("touch"===t&&(n.lastTouchTime=Date.now()),t===n.curPointerClass){var r="touch"===t?v(e.changedTouches,n.curTouchId)||(v(e.touches,n.curTouchId)?null:{}):e;r&&(n.end(r),n.options.preventDefault&&e.preventDefault(),n.options.stopPropagation&&e.stopPropagation())}}h(e,"mouseup",r,{capture:!1,passive:!1}),h(e,"touchend",r,{capture:!1,passive:!1}),n.curEndHandler=t}},{key:"end",value:function(e){p(e)&&(this.lastPointerXY.clientX=e.clientX,this.lastPointerXY.clientY=e.clientY),this.curEndHandler&&this.curEndHandler(this.lastPointerXY),this.curPointerClass=this.curTouchId=null}},{key:"addCancelHandler",value:function(e,t){var n=this;h(e,"touchcancel",(function(e){n.lastTouchTime=Date.now(),null!=n.curPointerClass&&(v(e.changedTouches,n.curTouchId)||!v(e.touches,n.curTouchId))&&n.cancel()}),{capture:!1,passive:!1}),n.curCancelHandler=t}},{key:"cancel",value:function(){this.curCancelHandler&&this.curCancelHandler(),this.curPointerClass=this.curTouchId=null}}])&&d(t.prototype,n),r&&d(t,r),e}();t.default=w}]).default; |
@@ -22,2 +22,3 @@ # PointerEvent | ||
// When `mousemove` or `touchmove` is fired on this element, this move-handler is called. | ||
// By default, the handler is called via `requestAnimationFrame`. `true` for third argument disables this. | ||
pointerEvent.addMoveHandler(document, function(pointerXY) { | ||
@@ -27,3 +28,3 @@ console.log('[MOVE]'); | ||
this.options.stopPropagation = false; // Access to current instance via `this`. | ||
}); | ||
}/*, true */); | ||
@@ -79,2 +80,6 @@ // When `mouseup` or `touchend` is fired on this element, this end-handler is called. | ||
PointerEvent.addEventListenerWithOptions(target, type, listener, options); | ||
// Emulate `click` event via `touchend` event. | ||
// Default emulator is disabled by `event.preventDefault()`. | ||
PointerEvent.initClickEmulator(element, moveTolerance, timeTolerance); | ||
``` |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
47394
903
83