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
- $resource .$promise and $resolved
- $http cache / $cacheFactory
- jQuery / angular.element in directives
- ng-pluralize
¿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