Tempo de leitura: 4 minutos

Animações na web podem ser controladas conforme as necessidades do usuário e da experiência que você deseja criar. Pausar ou desativar animações não só melhora a acessibilidade, mas também oferece controle sobre o desempenho do site.

Implementar mecanismos para controlar animações é essencial para respeitar preferências do usuário, especialmente para pessoas com sensibilidade visual ou vestibular. Além disso, permite economizar recursos do dispositivo quando necessário.

Como pausar e desativar animações na web

As animações são elementos poderosos que dão vida aos sites, mas nem sempre são desejáveis para todos os usuários. Algumas pessoas podem sofrer de distúrbios vestibulares, sensibilidade a movimentos ou simplesmente preferir uma experiência mais estática. Por isso, é fundamental oferecer controle sobre as animações em seu site.

Existem diversas técnicas para implementar o controle de animações, desde soluções simples com CSS até abordagens mais complexas com JavaScript. Vamos explorar as principais opções disponíveis e como implementá-las de forma eficaz.

Ao final deste guia, você terá conhecimento suficiente para criar um site que respeita as preferências do usuário quanto a animações, melhorando tanto a acessibilidade quanto a experiência geral.

Pausando animações com CSS

O CSS oferece propriedades nativas que permitem pausar animações facilmente. A propriedade mais importante para isso é a animation-play-state.

Usando animation-play-state

Esta propriedade aceita dois valores principais: “running” (em execução) e “paused” (pausada). Veja como implementar:

.elemento-animado {
animation: minhaAnimacao 2s infinite;
animation-play-state: running; /* estado padrão */
}

.elemento-animado.pausado {
animation-play-state: paused;
}

Para controlar isso via JavaScript, basta adicionar ou remover a classe “pausado”:

const botaoPausar = document.getElementById(‘botao-pausar’);
const elementoAnimado = document.querySelector(‘.elemento-animado’);

botaoPausar.addEventListener(‘click’, () => {
elementoAnimado.classList.toggle(‘pausado’);
});

Pausando transições CSS

Para transições CSS, não existe uma propriedade específica como animation-play-state. No entanto, você pode “pausar” transições removendo temporariamente a propriedade transition:

.elemento-transicao {
transition: transform 0.5s ease;
}

.elemento-transicao.sem-transicao {
transition: none;
}

Desativando animações completamente

Existem várias abordagens para desativar completamente as animações em um site.

Usando a media query prefers-reduced-motion

O CSS moderno oferece uma media query que detecta se o usuário configurou seu sistema operacional para reduzir animações:

@media (prefers-reduced-motion: reduce) {
* {
animation-duration: 0.001s !important;
transition-duration: 0.001s !important;
}
}

Este código respeita automaticamente as preferências do sistema do usuário, desativando efetivamente todas as animações e transições.

Segundo o Web Content Accessibility Guidelines (WCAG), oferecer uma alternativa para conteúdo em movimento é um requisito de acessibilidade importante. A media query prefers-reduced-motion é uma das melhores práticas recomendadas para cumprir este requisito.

Criando um botão para desativar animações

Você também pode oferecer um controle explícito para os usuários:

// HTML

// JavaScript
const botaoToggle = document.getElementById(‘toggle-animacoes’);

botaoToggle.addEventListener(‘click’, () => {
if (document.body.classList.contains(‘animacoes-desativadas’)) {
document.body.classList.remove(‘animacoes-desativadas’);
botaoToggle.textContent = ‘Desativar Animações’;
} else {
document.body.classList.add(‘animacoes-desativadas’);
botaoToggle.textContent = ‘Ativar Animações’;
}
});

// CSS
.animacoes-desativadas * {
animation: none !important;
transition: none !important;
}

Controlando animações de bibliotecas JavaScript

Se você utiliza bibliotecas como GSAP, Anime.js ou Lottie, cada uma oferece seus próprios métodos para pausar e retomar animações.

GSAP (GreenSock Animation Platform)

// Pausar uma animação específica
const minhaAnimacao = gsap.to(‘.elemento’, {duration: 1, x: 100});
minhaAnimacao.pause();

// Retomar a animação
minhaAnimacao.play();

// Pausar todas as animações
gsap.globalTimeline.pause();

Anime.js

const minhaAnimacao = anime({
targets: ‘.elemento’,
translateX: 250,
autoplay: true
});

// Pausar
minhaAnimacao.pause();

// Retomar
minhaAnimacao.play();

Lottie

const animacao = lottie.loadAnimation({
container: document.getElementById(‘lottie-container’),
renderer: ‘svg’,
loop: true,
autoplay: true,
path: ‘data.json’
});

// Pausar
animacao.pause();

// Retomar
animacao.play();

// Parar completamente
animacao.stop();

Considerações de acessibilidade

Oferecer controle sobre animações não é apenas uma questão de preferência, mas também de acessibilidade.

De acordo com a Web Accessibility Initiative (WAI), conteúdo que pisca, se move ou rola automaticamente pode causar desconforto, náusea e até desencadear convulsões em pessoas com certos tipos de epilepsia fotossensível ou distúrbios vestibulares.

Boas práticas

  • Respeite prefers-reduced-motion: Sempre implemente esta media query como base para sua estratégia de acessibilidade.
  • Ofereça controles explícitos: Adicione botões visíveis para pausar/retomar animações importantes.
  • Salve preferências: Use localStorage para lembrar a preferência do usuário entre sessões.
  • Comunique o estado: Deixe claro para o usuário se as animações estão ativas ou não.

Para salvar preferências, você pode implementar:

// Verificar preferência salva ao carregar a página
document.addEventListener(‘DOMContentLoaded’, () => {
const animacoesDesativadas = localStorage.getItem(‘animacoesDesativadas’) === ‘true’;

if (animacoesDesativadas) {
document.body.classList.add(‘animacoes-desativadas’);
document.getElementById(‘toggle-animacoes’).textContent = ‘Ativar Animações’;
}
});

// Atualizar ao clicar no botão
botaoToggle.addEventListener(‘click’, () => {
const novoEstado = !document.body.classList.contains(‘animacoes-desativadas’);
localStorage.setItem(‘animacoesDesativadas’, novoEstado);
// resto do código do botão…
});

Testando o controle de animações

Após implementar os controles, é importante testar se eles funcionam corretamente em diferentes cenários.

Lista de verificação para testes

  • Verifique se o botão de pausa/desativação funciona para todas as animações
  • Teste com a configuração prefers-reduced-motion ativada no sistema operacional
  • Certifique-se de que as preferências são salvas entre sessões
  • Verifique se animações de terceiros (como anúncios) também são controladas
  • Teste em diferentes navegadores e dispositivos

Para testar prefers-reduced-motion no Chrome, você pode usar as DevTools: Abra o inspetor, pressione Ctrl+Shift+P (ou Cmd+Shift+P no Mac), digite “Rendering” e ative a opção “Emulate CSS media feature prefers-reduced-motion”.

Conclusão e melhores práticas

Pausar e desativar animações é não apenas possível, mas essencial para criar sites acessíveis e respeitosos. Ao implementar os métodos discutidos neste guia, você oferece uma experiência melhor para todos os usuários, independentemente de suas necessidades ou preferências.

Lembre-se de que o objetivo final é o equilíbrio: animações podem enriquecer a experiência do usuário, mas nunca devem ser um obstáculo. Oferecer controle é a chave para uma web mais inclusiva.

Algumas considerações finais:

  • Implemente sempre a detecção de prefers-reduced-motion como base
  • Ofereça controles explícitos para animações importantes
  • Teste suas soluções com usuários reais, incluindo pessoas com necessidades de acessibilidade
  • Documente os controles de animação em suas diretrizes de design

Como você pretende implementar o controle de animações em seu site? Há algum caso específico que você está tentando resolver?

Avatar de Rafael P.

Perguntas Frequentes

Por que é importante pausar ou desativar animações na web?

Pausar ou desativar animações é crucial para melhorar a acessibilidade, pois algumas pessoas podem ter condições que tornam animações desconfortáveis ou até mesmo desorientadoras. Além disso, isso pode otimizar o desempenho do site, economizando recursos do dispositivo.

Como posso implementar um mecanismo para pausar animações?

Você pode implementar um mecanismo utilizando CSS e JavaScript. Por exemplo, ao usar preferências de usuário armazenadas em cookies ou configurações locais, você pode aplicar uma classe CSS que controla a animação e usa JavaScript para alternar essa classe com base nas escolhas do usuário.

Existem diretrizes de acessibilidade relacionadas a animações?

Sim, diretrizes como as WCAG (Web Content Accessibility Guidelines) recomendam que os desenvolvedores considerem a sensibilidade dos usuários a animações, permitindo opções para desativá-las ou limitá-las, visando criar uma experiência de navegação mais inclusiva.

Quais são as melhores práticas para desativar animações?

Melhores práticas incluem usar preferências do sistema operacional, como a configuração ‘reduzir movimento’ em dispositivos, e fornecer uma opção clara na interface do usuário para desativar animações, garantindo que esses controles sejam fáceis de encontrar e usar.

Como a desativação de animações pode afetar o desempenho do site?

Desativar animações pode melhorar o desempenho do site, especialmente em dispositivos com hardware limitado. Isso porque animações exigem processamento gráfico e, ao reduzi-las ou desativá-las, você libera recursos do CPU e GPU, resultando em um carregamento e resposta mais rápidos das páginas.

O caminho até aqui

Início » Checklist » Acessibilidade » Animações podem ser pausadas ou desativadas?

Compartilhe sua opinião e ajude na próxima atualização do artigo.

Somente membros podem interagir com o conteúdo.