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.
npm install @kkwaenggwari/animatedUn 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.ViewporAnimated.div. - Un valor puede mover a la vez una barra, un dial y una fila de tarjetas, cada uno con su propio rango.
useAnimatedgestiona 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
// 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.
scopeescribe 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
springla trayectoria se curva; contimingconserva 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…
Lo que puedes construir
Patrones completos con ajustes regulables y todo el código fuente.
Todos los ejemplos- Dock magnéticoLos iconos crecen al pasar el puntero, apartan a sus vecinos y se asientan cuando se va.
moveInputfollowuseAnimatedCSSmultiply - Mazo deslizableArrastra la carta de arriba. Si pasa el umbral, sale volando; si no, vuelve con un resorte.
dragInputuseAnimatedListenerAnimated.div - Galería compartidaUna miniatura crece hasta una vista de detalle y vuelve a encogerse en la cuadrícula.
Animated.SceneAnimated.Keepmove
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 ChorusEmpieza 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