Animação para React DOM · API Animated do React Native
Escreva a animação uma vez. Ela flui e nunca quebra.
O Animated traz o Animated do React Native para a web. Um valor move quantos elementos você quiser sem render do React a cada quadro, o movimento compatível é reproduzido pelo próprio navegador e toda interrupção continua do que está na tela.
npm install @kkwaenggwari/animatedUm valor de relógio controla a onda das 64 formas. Passe o ponteiro sobre o palco.
Medido nesta versão
Medido com o build 1.0.0 no Chrome headless em um PC de mesa. Os números variam conforme o dispositivo. Como medimos
- 0.00msJavaScript por quadro enquanto 400 elementos se movem
O movimento finito de transform e opacity em elementos Animated roda no navegador. Os callbacks de quadro da própria página não fazem nada.
- 0.13msJavaScript por quadro com um valor movendo 10.000 elementos
O valor grava uma variável CSS; cada elemento deriva o estilo dela no CSS.
- 0Renders do React durante o movimento
Os valores nunca passam pelo estado do React. Os componentes renderizam quando suas props mudam, não quando um quadro muda.
01 · Fácil
A API que você já conhece, no style comum do React
timing, spring, interpolate, loop e Animated.event mantêm os nomes e as configurações do React Native. Um valor vai direto para uma prop style comum, então não há nenhum componente especial para aprender antes da primeira animação.
- Porte código do React Native trocando
Animated.ViewporAnimated.div. - Um valor pode mover ao mesmo tempo uma barra, um mostrador e uma fileira de cards, cada um com sua própria faixa.
useAnimatedcuida da receita: começa na montagem, recomeça quando uma dependência muda e faz a limpeza na desmontagem.
Preparando o exemplo…
As mesmas chamadas do 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
Sem render do React a cada quadro
Um valor de hook é uma variável CSS. Interpolações lineares e aritmética viram expressões calc() exatas dessa variável, então cada quadro é uma única gravação e o navegador deriva o resto. O movimento finito de transform e opacity em elementos Animated.<tag> roda no navegador sem callbacks de quadro.
- Mude o número de pontos: o contador mostra que o React renderizou uma vez por mudança, nunca por quadro.
scopegrava o valor uma vez em um contêiner em vez de em cada elemento.inspect(element)mostra qual caminho cada propriedade usa e por quê.
Preparando o exemplo…
03 · Estável
Interrompa onde quiser. Ele continua.
Um novo destino começa de onde o elemento está na tela, e uma mola ainda mantém a velocidade, então inverter no meio do caminho faz a curva com suavidade em vez de parar antes. Controladores declarados em um hook são parados e liberados na substituição e na desmontagem, e a marcação renderizada no servidor continua animando depois da hidratação.
- Clique duas vezes rápido: com
springa trajetória se curva; comtimingela mantém a posição, mas começa uma curva nova. - Parar deixa o valor onde está; nada salta para um estado final.
- Nenhum loop de quadros solto depois de desmontar, trocar de rota ou ocultar abas.
Preparando o exemplo…
O que você pode construir
Padrões completos com configurações ajustáveis e todo o código-fonte.
Todos os exemplos- Dock magnéticoOs ícones crescem quando o ponteiro passa, empurram os vizinhos e se acomodam quando ele sai.
moveInputfollowuseAnimatedCSSmultiply - Baralho deslizanteArraste o card de cima. Passando do limite, ele sai voando; senão, volta com uma mola.
dragInputuseAnimatedListenerAnimated.div - Galeria compartilhadaUma miniatura cresce até uma visualização detalhada e volta a encolher na grade.
Animated.SceneAnimated.Keepmove
Feito com Animated
Precisa de um componente pronto? Animated Chorus.
Números que rolam, destaques de abas que se movem, progresso, sheets e listas animadas que entram direto no React e no React Native. Estes três estão rodando nesta página agora mesmo.
Conhecer o Animated ChorusComece em três minutos
Instale o pacote, mova seu primeiro valor e escolha um guia para a tarefa que você tem pela frente.
npm install @kkwaenggwari/animated