¿Puedes detectar un doble toque desde javascript con angular-touch instalado?

Estoy tratando de asignar un gesto para "eliminar foto" en un dispositivo táctil y un doble toque tiene sentido. ¿Hay una forma amigable angular para detectar un double-tap , o incluso un long-tap desde javascript? Angular-touch no lo admite fuera de la caja.

PS: Sé que puedo usar hammer.js pero prefiero no cargar otra lib si puedo evitarlo. El carrusel angular ya carga el toque angular.

Piqué a través de angular-touch.js y agregué esto:

  longtapHandler = $parse(attr.ngLongtap), 

esta:

  /* * add longtap event */ if (tapping && diff > (1 * TAP_DURATION) && dist < MOVE_TOLERANCE) { // Call preventGhostClick so the clickbuster will catch the corresponding click. preventGhostClick(x, y); // Blur the focused element (the button, probably) before firing the callback. // This doesn't work perfectly on Android Chrome, but seems to work elsewhere. // I couldn't get anything to work reliably on Android Chrome. if (tapElement) { tapElement.blur(); } if (!angular.isDefined(attr.disabled) || attr.disabled === false) { element.triggerHandler('longtap', [event]); } } 

y esto

 element.on('longtap', function(event, touchend) { scope.$apply(function() { longtapHandler(scope, {$event: (touchend || event)}); }); }); 

Parece que funciona bien.

Si no hay una forma nativa de hacerlo, puede configurarlo manualmente usando un timer. Aquí hay una implementación usando javascript. El mismo concepto simplemente lo convierte en su evento angular.

 clicks++; if (clicks == 1) { setTimeout(function(){ if(clicks == 1) { single_click_callback.call(self, event); } else { double_click_callback.call(self, event); } clicks = 0; }, timeout || 300); } 

Código tomado de este enlace

Puede usar ios-dblclick , una directiva que escribí para manejar el evento de doble clic en iOS Safari. No tiene dependencia y funciona como ng-dblclick . Está disponible aquí en Github .

Aquí hay un ejemplo de uso

 <div ios-dblclick="removePhoto()"></div> 

Y la directiva

 .directive('iosDblclick', function () { const DblClickInterval = 300; //milliseconds var firstClickTime; var waitingSecondClick = false; return { restrict: 'A', link: function (scope, element, attrs) { element.bind('click', function (e) { if (!waitingSecondClick) { firstClickTime = (new Date()).getTime(); waitingSecondClick = true; setTimeout(function () { waitingSecondClick = false; }, DblClickInterval); } else { waitingSecondClick = false; var time = (new Date()).getTime(); if (time - firstClickTime < DblClickInterval) { scope.$apply(attrs.iosDblclick); } } }); } }; });