0Pricing
React Academy · Lección

Animaciones controladas por gestos con use-gesture

Combinar react-spring con @use-gesture/react para crear animaciones controladas por arrastre, pellizco y desplazamiento

Animaciones controladas por gestos con use-gesture es una lección gratuita de React Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de React Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de React Academy incluye 4 lecciones en total.

@use-gesture/react: descripción general

@use-gesture/react es una biblioteca de reconocimiento de gestos diseñada para funcionar de forma fluida con react-spring. Reconoce gestos de arrastre, pellizco, desplazamiento, hover, movimiento y rueda, y proporciona un estado del gesto normalizado que puede pasar directamente a los setters de spring para crear interacciones fluidas basadas en física.

Estado del gesto useDrag

El hook useDrag ejecuta un callback en cada evento de arrastre. El callback recibe un objeto de estado del gesto con varias propiedades clave: movement (desplazamiento total desde el inicio del arrastre), velocity (velocidad actual), direction (1 o -1 por eje), first (true al iniciar el arrastre), last (true al finalizarlo) y event (el evento DOM sin procesar).

La función bind()

Todos los hooks de use-gesture devuelven una función bind(). Al llamar a bind(), se devuelve un objeto con propiedades de controladores de eventos (onPointerDown, onTouchStart, etc.) que puede extender sobre el elemento que desea hacer interactivo. Este es el punto de conexión entre el reconocedor de gestos y su elemento DOM.

Combinar useDrag con react-spring

El patrón estándar consiste en crear un spring con la API imperativa ([springs, api] = useSpring(...)) y, después, utilizar useDrag para llamar a api.start({ x: movement[0], y: movement[1] }) en cada evento de arrastre. El spring sigue suavemente el movimiento del arrastre y añade una física natural a lo que, de otro modo, sería un seguimiento rígido del cursor.

Volver a la posición inicial al soltar

Cuando termina un arrastre (last: true en el estado del gesto), normalmente debe devolver el elemento a su origen. Llame a api.start({ x: 0, y: 0 }) dentro de una comprobación if (last). react-spring anima el regreso con física de spring —un rebote suave en lugar de un restablecimiento instantáneo—, lo que proporciona una sensación física satisfactoria a la interacción.

Lanzamiento y deslizamiento con velocidad

El valor velocity del estado del gesto permite implementar un comportamiento de lanzamiento. Cuando el usuario suelta el elemento con mucha velocidad, puede lanzarlo en la dirección del arrastre en lugar de devolverlo a su posición inicial. Compruebe if (last && velocity[0] > threshold) y, después, anime el elemento hasta su posición final fuera de la pantalla. Esto es fundamental para las interacciones de deslizar para descartar.

Límites del arrastre y acotación

Para restringir el movimiento de arrastre dentro de un contenedor, acote los valores del movimiento antes de pasarlos al spring: x: Math.max(-maxX, Math.min(maxX, movement[0])). Como alternativa, utilice la opción integrada bounds de use-gesture: useDrag(handler, { bounds: { left: -100, right: 100 } }) para acotar automáticamente el estado del gesto.

Patrón de deslizar para descartar

Para implementar deslizar para descartar en dispositivos móviles, utilice useDrag para seguir el movimiento horizontal. Si el usuario suelta el elemento con una velocidad superior al umbral O lo ha desplazado más de la mitad del ancho de la pantalla, anime la tarjeta fuera de la pantalla (api.start({ x: window.innerWidth })) y, después, elimínela de la lista. De lo contrario, devuélvala al centro.

usePinch para interacciones de zoom

usePinch reconoce gestos de pellizco con dos dedos en pantallas táctiles y Ctrl+wheel en equipos de escritorio. El estado del gesto incluye scale (nivel de zoom actual relativo al inicio del pellizco) y origin (punto central del pellizco). Conecte estos valores a un spring que siga la escala para crear interacciones de zoom fluidas y limitadas en imágenes o mapas.

useHover y useMove

useHover se activa cuando el puntero entra o sale de un elemento y proporciona un booleano active. useMove sigue la posición del ratón dentro de un elemento y proporciona coordenadas normalizadas. Ambos son útiles para crear efectos de hover magnéticos, en los que los elementos se desplazan sutilmente hacia el cursor a medida que este se acerca.

Combinar varios gestos

Los hooks de use-gesture se pueden combinar. Puede utilizar useDrag y usePinch en el mismo elemento: const bindDrag = useDrag(...); const bindPinch = usePinch(...); después, extienda ambas funciones bind: ...bindDrag() ...bindPinch(). use-gesture distingue automáticamente entre los distintos tipos de gestos.

Finalidad de la función bind()

¿Qué hace la función bind() que devuelven los hooks de use-gesture?

Resumen de la lección: integración de use-gesture

@use-gesture/react proporciona useDrag, usePinch, useScroll, useHover y useMove. Cada hook devuelve una función bind() cuyo resultado extendido conecta los eventos de gestos con los elementos DOM. El estado del gesto proporciona movement, velocity, direction, first y last. Combine estos hooks con la función imperativa api.start() de react-spring para crear animaciones interactivas basadas en física. Utilice velocity para los lanzamientos y descartes, y bounds para acotar el movimiento.

Preguntas frecuentes

¿La lección «Animaciones controladas por gestos con use-gesture» es gratis?

Sí — el texto completo de «Animaciones controladas por gestos con use-gesture» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de React Academy, actualiza a CoddyKit PRO. El curso de React Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Animaciones controladas por gestos con use-gesture»?

Combinar react-spring con @use-gesture/react para crear animaciones controladas por arrastre, pellizco y desplazamiento Practicas React Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar React Academy?

No se requiere experiencia previa. React Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Animaciones controladas por gestos con use-gesture»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de React Academy?

Sí. Cada lección de React Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Fundamentos de React Spring: hook useSpring
  2. Componentes animados e interpolación de estilos
  3. useTrail y useChain para secuencias
  4. Animaciones controladas por gestos con use-gesture
← Volver a React Academy