Carlos Cifuentes
Referencia AngularJS → Angular

ngTouch (ng-swipe-left / ng-swipe-right) en Angular moderno

ngTouch no tiene sucesor directo. Los gestos de swipe se escriben con pointer events nativos, normalmente dentro de una directiva pequeña.

Antes · AngularJS
<div class="slide"
     ng-swipe-left="vm.next()"
     ng-swipe-right="vm.prev()">
  <img ng-src="{{ vm.current.url }}">
</div>
Después · Angular
@Directive({
  selector: '[appSwipe]',
  host: {
    '(pointerdown)': 'startX = $event.clientX',
    '(pointerup)': 'end($event)',
    'style': 'touch-action: pan-y',
  },
})
export class SwipeDirective {
  swipe = output<'left' | 'right'>();
  startX = 0;
  end(e: PointerEvent) {
    const dx = e.clientX - this.startX;
    if (Math.abs(dx) > 40) { this.swipe.emit(dx < 0 ? 'left' : 'right'); }
  }
}

Qué cambia

  • Los pointer events cubren mouse, touch y lápiz con una sola API, así que no hay un módulo extra que cargar.
  • La propiedad CSS touch-action le indica al navegador qué gestos puede reservar para el scroll; sin ella el navegador puede cancelar la secuencia de pointer events.
  • HammerJS ya no tiene mantenimiento, así que evita construir código nuevo de gestos sobre esa librería.

Consejo de migración. Revisa si el gesto hace falta. Muchos carruseles que usaban ng-swipe se pueden reconstruir con CSS scroll snap, que da swipe nativo sin código de gestos.

Relacionado

¿Planeas una migración o una plataforma de microfrontends?

En una llamada de 20 minutos me cuentas tu situación y te digo cómo la abordaría. Si todavía no vale la pena, también te lo digo.

Escríbeme por LinkedIn