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.

Instalar
npm install @kkwaenggwari/animated

Um 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.View por Animated.div.
  • Um valor pode mover ao mesmo tempo uma barra, um mostrador e uma fileira de cards, cada um com sua própria faixa.
  • useAnimated cuida 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

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

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.
  • scope grava 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 spring a trajetória se curva; com timing ela 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…

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 Chorus

Comece 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

Pesquisar

Digite para pesquisar na documentação.