GH GambleHub

Design motion e animação de interface

1) Para quê animação no produto

Animação é navegação no tempo. Ela:
  • explica as relações de causa e efeito (onde desapareceu, de onde surgiu o elemento),
  • direciona a atenção para a ação principal,
  • confirma o resultado (feedback) e reduz a carga cognitiva,
  • torna as transições previsíveis e tangíveis.

Regra nº 1: sentido> estilo. Qualquer animação responde à pergunta "O que aconteceu e o que tem a ver comigo? ».

2) Princípios básicos

1. Hierarquia de movimento: os primeiros contêineres são movidos, depois o conteúdo e as peças.
2. Permanência: pattern idênticos para ações idênticas.
3. Poupança: mínimo de propriedades, mínimo de quadros; É melhor e mais claro.
4. Física realista: aceleração no início, desaceleração no final; faltam «passos».
5. Reversível, «para trás» é sentido espelhadamente «para frente».
6. Disponibilidade: respeite as configurações do sistema para reduzir a animação.

3) Duração e curvas (recomendações)

3. 1 Duração (desktop/mobile)

Hover: 120-180 ms

Focus/Pressed: 80–120 мс

Tooltip/Toast: entrada 180-240 ms, saída 120-160 ms

Modalks/drowers: 200-320 ms

Transições de ecrã: 240-360 ms

Referências scroll/paralax: ≤ 200 ms por segmento, evitar ciclos infinitos

3. 2 Curvas

Principal: 'cubic-bezier (0. 2, 0. 0, 0. 2, 1) '- ritmo natural «material»

Entrada mais rápida, saída mais suave: 'cubic-bezier (0. 05, 0. 7, 0. 1, 1)`

Elasticidade (raramente, sotaque): 'cubic-bezier (0. 2, 0. 8, 0. 2, 1. 2) 'com limite de overshoot ≤ 8px/8 °

Regra: não use a interpolação linear para mover e opacity ao mesmo tempo - sensação de «mecânica».

4) Coreografia de transições

Aparecimento: Escala leve 0. 98→1. 0 + fade-in, deslocamento 8-16 px no eixo de ocorrência.
Desaparecimento: ordem inversa, mais rápido que a entrada (- 20-30%).
Redesenhar/mudar as chapas: a base geral (contêiner) é movida para 16-24 px; a guia ativa é realçada antes do movimento começar.
Listas: enfraqueça cascata (stagger 20-40 ms/elemento, no máximo 6-8 elementos).

5) Micro-interações (patterns)

Botão (hover/press): sombra + escrivaninha leve/scale 0. 98; pressed rebenta ≤ 80 mc.
Foco: anel de contraste sem blur; animar espessura/transparência em vez de glow.
Inputs: carruagem/realce do campo em focus; erros - agitar ≤ 6 px, ≤ 140 ms, 1 ciclo.
Toggle/Checkbox: snap até a posição final, o atraso do clique não passa de 60-80 ms.
Skeleton/download: shimmer 1200-1600 ms, amplitude de brilho ≤ 20%, sem flash brusco.

6) Estados de conteúdo

Loading → Sucess/Empty/Erro: um «canal» de movimento; não misture as diferentes direções.
Toast/Alerts: vem do lado da origem do evento (por exemplo, abaixo-direita para as ações do usuário).
Pull to refresh: alongamento com largura elástica; tempo de retorno ≤ 250 ms.

7) Disponibilidade (A11y) e segurança

Suporte 'preferers-reduced-motion': substitua os movimentos por 'fade/scale' ≤ 1% ou transição estática.
Evite flashes> 3 por segundo e grandes piscadas de contraste (epilepsia fotossensiva).
Não use um forte paralax/zoom em usuários com histórico de picagem; faça uma opção de desligamento.
Os estilos de foco são sempre visíveis sem animação (não apenas cor/movimento).

8) Desempenho (60 FPS como alvo)

Anime apenas opacity e trans (translate/scale/rotate); evite 'top/left/width/height'.
Inclua o compositing: 'trans: translateZ (0)' ou 'will-altere: trans, opacity' (moderado).
Minimize o repaint: não anime sombras com blur maior e filtros em vários itens.
Separe as grandes transições em batches; use o requestAnimationFrame.
Para as listas, é possível virtualizar/redefinir fora da tela.

9) Tokens motion em design

json
{
"motion": {
"duration": { "xs": 100, "sm": 160, "md": 220, "lg": 280, "xl": 340 },
"easing": {
"standard": "cubic-bezier(0. 2, 0. 0, 0. 2, 1)",
"emphasis": "cubic-bezier(0. 05, 0. 7, 0. 1, 1)",
"decelerate": "cubic-bezier(0. 0, 0. 0, 0. 2, 1)",
"accelerate": "cubic-bezier(0. 4, 0. 0, 1, 1)"
},
"stagger": { "listItem": 30, "maxItems": 8 }
}
}

Именование: `motion.{duration|easing|stagger}.{role}` — `hover`, `focus`, `overlayIn`, `pageTransition`, `listItem`.

10) Implementação (CSS/JS/React)

Variáveis CSS:
css
:root {
--motion-dur-sm: 160ms;
--motion-dur-md: 220ms;
--motion-ease: cubic-bezier(0. 2, 0, 0. 2, 1);
}
@media (prefers-reduced-motion: reduce) {
{ animation: none! important; transition-duration: 0. 01ms! important; }
}
Componente (Framer Motion, por exemplo):
tsx import { motion, AnimatePresence } from "framer-motion";

export function Modal({ open, children }) {
return (
<AnimatePresence>
{open && (
<motion. div initial={{ opacity: 0 }}
animate={{ opacity: 1, transition: { duration: 0. 22 } }}
exit={{ opacity: 0, transition: { duration: 0. 16 } }}
className="fixed inset-0 bg-black/50"
>
<motion. div initial={{ y: 16, scale: 0. 98, opacity: 0 }}
animate={{ y: 0, scale: 1, opacity: 1, transition: { duration: 0. 24, ease: [0. 2,0,0. 2,1] } }}
exit={{ y: 8, scale: 0. 99, opacity: 0, transition: { duration: 0. 18 } }}
className="m-auto max-w-lg rounded-2xl bg-white p-6"
>
{children}
</motion. div>
</motion. div>
)}
</AnimatePresence>
);
}

Lotti/SVG: Use os estados nativos ilustrativos e onboarding; não para controladores críticos. Otimize e mantenha em memória.

11) Pattern download

Skeleton em vez de spinner onde a estrutura de conteúdo é conhecida.
Progress: Um bar determinado, se for conhecido o progresso; Indeterminado, com ritmo uniforme, sem movimento.
Evite skeleton flutuante na reconstrução - Fixe as dimensões.

12) Transições entre páginas/telas

Mantenha o ponto de atenção (shared element transitions) - o cartão é «exposto» em um detalhe.
A navegação para dentro avança/para a direita/para cima, para trás; a direção é unificada para a plataforma.
O suprimento de fundo fica escuro entre 40% e 60% em overleads.

13) Especificidades iGaming

Spin/Reveal: uma aceleração curta (≤ 200 ms) + rotação uniforme + suave; a proibição de ciclos infinitos sem efeito.
Win/Jackpot: elevação de luz ≤ 500 ms, sem versículo; tomas de som em baixo volume; o texto da vitória é chitabelino (AAA em contraste).
Torneios/classificações: acréscimo de conta - contagem com números tabelados e passo fácil 40-60 ms/unidade (batches), sem «saltos» layout.
Jogo responsável: notificações e limites sem efeitos de distração; animação mínima, ênfase na lisura.

14) Anti-pattern

Atrasos> 120 ms até responder ao clique.
Elevador de opacity + scale 0. 9→1. 05→1. 0 com overshoot para cada pequena peça.
Paralax de fundo em conflito com scroll.
Infinitas pontuações/pulsações.
Animação das propriedades layout/paint ('height', 'left',' filter: blur () ') em vários elementos.
Curvas não permanentes e duração em ações idênticas.

15) Processo e QA

No design:
  • Protótipos com tymings/curvas; coreografia em quadros.
  • Catálogo de motion-tokens e exemplos para componentes.
Em desenvolvimento:
  • Testes unit de visibilidade/estado (transições concluídas como esperado).
  • Testes visuais (súmulos do fim das animações).
  • Perfilação (Performance/Timeline) em cenas com carga máxima.
Folha de cheque:
  • Apoiado por 'preferers-reduced-motion'.
  • Somente transfer/opacity.
  • A duração e as curvas correspondem a tokens.
  • Sem flash> 3/segundo e linha forte.
  • Skeleton em vez de spinner, onde possível.
  • As transições são reversíveis e previsíveis.

16) Documentação em design

«Motion-tokens»: duration/easing/stagger com exemplos.
«Pattern de transição»: modais, listas, guias, páginas.
«A11y & Performance»: hyde de reduce-motion e composição.
«Do/Don 't»: clipes curtos com exemplos de sucesso/fracasso.

Resumo curto

O design Motion é uma linguagem de causa e efeito. Mantenha os times curtos, as curvas alinhadas e as propriedades baratas para render. Respeite a disponibilidade, documente os tokens e verifique o desempenho. Então, a animação reforça o UX e não interfere com a velocidade e clareza da interface.

Contact

Entrar em contacto

Contacte-nos para qualquer questão ou necessidade de apoio.Estamos sempre prontos para ajudar!

Iniciar integração

O Email é obrigatório. Telegram ou WhatsApp — opcionais.

O seu nome opcional
Email opcional
Assunto opcional
Mensagem opcional
Telegram opcional
@
Se indicar Telegram — responderemos também por lá.
WhatsApp opcional
Formato: +indicativo e número (ex.: +351XXXXXXXXX).

Ao clicar, concorda com o tratamento dos seus dados.