Socket
Socket
Sign inDemoInstall

pointer-event

Package Overview
Dependencies
Maintainers
1
Versions
18
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

pointer-event - npm Package Compare versions

Comparing version 1.1.0 to 1.2.0

2

package.json
{
"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);
```
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc