angular-long-press
Version:
An angular.js long press directive for both desktop and mobile
2 lines (1 loc) • 1.16 kB
JavaScript
!function(){"use strict";angular.module("pr.longpress",[]).directive("onLongPress",["$parse","$timeout",function(a,b){return{restrict:"A",link:function(c,d,e){function l(d){var h=a(e.onLongPress);(d.originalEvent||d).touches&&(i=(d.originalEvent||d).touches[0].screenY,j=(d.originalEvent||d).touches[0].screenX),b.cancel(f),c.longPressSent=!1,f=b(function(){c.longPressSent=!0,c.$apply(function(){h(c,{$event:d})})},g)}function m(d){var g=a(e.onTouchEnd);b.cancel(f),e.onTouchEnd&&c.$apply(function(){g(c,{$event:d})})}function n(a){!c.longPressSent||e.preventClick&&"true"!==e.preventClick||(a.preventDefault(),a.stopPropagation(),a.stopImmediatePropagation())}function o(a){var c=(a.originalEvent||a).touches[0].screenY,d=(a.originalEvent||a).touches[0].screenX;(void 0!==i&&void 0!==j&&Math.abs(c-i)>k||Math.abs(d-j)>k)&&b.cancel(f)}var f,i,j,g=!isNaN(e.longPressDuration)&&parseInt(e.longPressDuration)||600,h=!e.preventOnscrolling||"true"===e.preventOnscrolling,k=15;d.bind("touchstart",l),d.bind("touchend",m),d.bind("mousedown",l),d.bind("mouseup",m),d.bind("click",n),d.bind("pointerdown",l),d.bind("pointerup",m),h&&d.bind("touchmove",o)}}}])}();