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.
Conteúdos
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?
Compartilhe sua opinião e ajude na próxima atualização do artigo.
Você precisa acessar sua conta para comentar.