0Pricing
HTML Academy · Aula

Animação com requestAnimationFrame

Crie animações suaves no canvas com o laço de quadros de animação.

Animação com requestAnimationFrame é uma aula grátis de HTML Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de HTML Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de HTML Academy inclui 4 aulas no total.

Por que usar requestAnimationFrame?

requestAnimationFrame (rAF) agenda uma chamada de retorno antes da próxima repintura do navegador, sincronizando a animação com a taxa de atualização da tela (normalmente 60fps). Ao contrário de setInterval, rAF é pausado quando a aba fica oculta, economizando CPU e bateria.

Laço básico de animação

Um laço rAF: defina uma função animate que desenha o quadro atual e depois chama requestAnimationFrame(animate) para agendar o próximo. O navegador chama animate antes de cada repintura, criando uma animação contínua na taxa de quadros da tela.

function animate(timestamp) {
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  // draw frame at current state
  draw(timestamp);
  requestAnimationFrame(animate);
}
requestAnimationFrame(animate);

O parâmetro de marcação de tempo

rAF passa uma marca de tempo de alta resolução do DOM (milissegundos desde o carregamento da página) para a chamada de retorno. Use-a para calcular um movimento independente da taxa de quadros: delta = timestamp - lastTimestamp. Multiplique a velocidade por delta para mover a mesma distância por segundo, independentemente da taxa de quadros.

Movimento independente da taxa de quadros

Calcule o tempo transcorrido desde o último quadro e ajuste o movimento de acordo. Um objeto que se move a 100px/s percorre 100 * (delta / 1000) pixels por quadro. Isso garante uma física consistente em telas de 30fps e 144fps.

Interrompendo a animação

rAF retorna um identificador. Cancele-o com cancelAnimationFrame(handle). Armazene o identificador em uma variável, verifique um sinalizador de execução dentro do laço ou cancele-o durante a limpeza do componente. Sempre cancele os laços quando o elemento for removido do DOM.

Padrão de animação da tela

A cada quadro: (1) use clearRect na tela inteira, (2) atualize as variáveis de estado (posição, ângulo, tempo), (3) desenhe todos os objetos nas novas posições, (4) chame requestAnimationFrame para o próximo quadro. Nunca ignore clearRect — os quadros antigos se acumulam como um rastro.

Transições CSS versus rAF

Use transições e animações CSS para animações simples baseadas em propriedades (efeitos ao passar o cursor, entrada deslizante de janelas modais). Use rAF para animações complexas e interativas — laços de jogos, simulações físicas e renderização na tela — quando precisar de controle detalhado sobre cada quadro.

Buffer duplo na tela

Para cenas complexas, desenhe primeiro em uma tela fora da tela e depois use drawImage para desenhá-la na tela visível em uma única operação. Isso evita cintilação, pois nunca exibe um quadro parcialmente desenhado — a tela visível é atualizada atomicamente a cada quadro.

Limitação à taxa de FPS desejada

Limite a uma taxa de quadros menor (por exemplo, 30fps): verifique se transcorreu tempo suficiente desde o último desenho antes de renderizar. if (timestamp - lastDraw >= 1000/30) { draw(); lastDraw = timestamp; }. Agende rAF mesmo assim para manter a capacidade de resposta.

Depurando animações

O painel de desempenho do Chrome DevTools registra as chamadas de retorno de rAF no gráfico de chamas do JS. Procure chamadas longas que ultrapassem 16 ms — elas causam perda de quadros. Use o medidor de FPS (Renderização → medidor de FPS) para observar a taxa de quadros em tempo real durante a interação.

Alternativa: Web Animations API

Para animações declarativas mais simples, sem temporização manual: element.animate(keyframes, options). WAAPI gerencia funções de temporização, modos de preenchimento e iterações, transferindo o cálculo dos quadros para o navegador. Use rAF para a lógica de renderização personalizada que WAAPI não consegue expressar.

Verificação de conhecimento

Por que a velocidade da animação deve ser multiplicada pelo tempo delta em um laço requestAnimationFrame?

Resumo

requestAnimationFrame sincroniza a animação em JavaScript com a taxa de atualização da tela e pausa em abas ocultas. O parâmetro de marcação de tempo permite um movimento independente da taxa de quadros por meio do ajuste pelo tempo delta. O padrão de laço de animação da tela (limpar, atualizar, desenhar, agendar), combinado com cancelAnimationFrame para a limpeza, forma a base de animações web suaves e eficientes.

Perguntas Frequentes

A aula “Animação com requestAnimationFrame” é grátis?

Sim — o texto completo de “Animação com requestAnimationFrame” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de HTML Academy, atualize para CoddyKit PRO. O curso de HTML Academy inclui 4 aulas no total.

O que vou aprender em “Animação com requestAnimationFrame”?

Crie animações suaves no canvas com o laço de quadros de animação. Você pratica HTML Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar HTML Academy?

Nenhuma experiência prévia é necessária. HTML Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Animação com requestAnimationFrame”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de HTML Academy?

Sim. Cada aula de HTML Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Configurando o Canvas e o contexto 2D
  2. Desenhando retângulos e caminhos
  3. Texto e imagens no Canvas
  4. Animação com requestAnimationFrame
← Voltar para HTML Academy