Animación para React DOM · API Animated de React Native

Escribe la animación una vez. Fluye y nunca se rompe.

Animated lleva el Animated de React Native a la web. Un valor mueve cualquier número de elementos sin un render de React por fotograma, el movimiento compatible lo reproduce el propio navegador y cada interrupción continúa desde lo que se ve en pantalla.

Instalar
npm install @kkwaenggwari/animated

Un valor de reloj mueve la onda de las 64 formas. Pasa el puntero por el escenario.

Medido en esta versión

Medido con la build 1.0.0 en Chrome headless en un PC de escritorio. Las cifras varían según el dispositivo. Cómo lo medimos

  • 0.00msJavaScript por fotograma mientras se mueven 400 elementos

    El movimiento finito de transform y opacity en elementos Animated lo reproduce el navegador. Los callbacks de fotograma de la propia página no hacen nada.

  • 0.13msJavaScript por fotograma con un valor que mueve 10.000 elementos

    El valor escribe una variable CSS; cada elemento deriva su estilo de ella en CSS.

  • 0Renders de React durante el movimiento

    Los valores nunca pasan por el estado de React. Los componentes se renderizan cuando cambian tus props, no cuando cambia un fotograma.

01 · Fácil

La API que ya conoces, sobre el style normal de React

timing, spring, interpolate, loop y Animated.event conservan sus nombres y configuraciones de React Native. Un valor va directo a una prop style normal, así que no hay ningún componente especial que aprender antes de tu primera animación.

  • Porta código de React Native cambiando Animated.View por Animated.div.
  • Un valor puede mover a la vez una barra, un dial y una fila de tarjetas, cada uno con su propio rango.
  • useAnimated gestiona la receta: arranca al montar, se reinicia cuando cambia una dependencia y limpia al desmontar.

Preparando el ejemplo…

Las mismas llamadas que en React Native

Spinner.jsx
// React Native
<Animated.View style={{ transform: [{ rotate }] }} />

// React DOM with @kkwaenggwari/animated — the rest is identical
<Animated.div style={{ transform: [{ rotate }] }} />

const spin = useAnimatedValue(0);
const rotate = spin.interpolate({ inputRange: [0, 1], outputRange: ['0deg', '360deg'] });

Animated.loop(
  Animated.timing(spin, { toValue: 1, duration: 900, easing: Easing.linear, useNativeDriver: true }),
).start();

02 · Rápido

Sin render de React por fotograma

Un valor de hook es una variable CSS. Las interpolaciones lineales y la aritmética se convierten en expresiones calc() exactas de esa variable, así que cada fotograma es una sola escritura y el navegador deriva el resto. El movimiento finito de transform y opacity en elementos Animated.<tag> se reproduce en el navegador sin callbacks de fotograma.

  • Cambia el número de puntos: el contador muestra que React se renderizó una vez por cambio, nunca por fotograma.
  • scope escribe el valor una vez en un contenedor en lugar de en cada elemento.
  • inspect(element) te dice qué camino usa cada propiedad y por qué.

Preparando el ejemplo…

03 · Estable

Interrúmpelo donde sea. Continúa.

Un nuevo destino empieza desde donde está el elemento en pantalla, y un resorte además conserva su velocidad, así que invertir a mitad de camino gira con suavidad en lugar de frenar primero. Los controladores declarados en un hook se detienen y liberan al reemplazarse y al desmontar, y el marcado renderizado en el servidor sigue animándose tras la hidratación.

  • Haz clic dos veces rápido: con spring la trayectoria se curva; con timing conserva la posición pero empieza una curva nueva.
  • Detener deja el valor donde está; nada salta a un estado final.
  • No quedan bucles de fotogramas sueltos tras desmontar, cambiar de ruta u ocultar pestañas.

Preparando el ejemplo…

Hecho con Animated

¿Necesitas un componente terminado? Animated Chorus.

Números que ruedan, resaltados de pestañas que viajan, progreso, hojas y listas animadas que se integran directamente en React y React Native. Estos tres se están ejecutando ahora mismo en esta página.

Ir a Animated Chorus

Empieza en tres minutos

Instala el paquete, mueve tu primer valor y luego elige una guía para la tarea que tienes delante.

npm install @kkwaenggwari/animated

Buscar

Escribe para buscar en la documentación.