GH GambleHub

Design motion e animazioni interfacce

1) Perché l'animazione nel prodotto

L'animazione è navigazione nel tempo. Lei:
  • spiega i rapporti causali (dove è scomparso, da dove è emerso l'elemento)
  • punta l'attenzione sull'attività principale
  • conferma il risultato (feedback) e riduce il carico cognitivo,
  • rende le transizioni prevedibili e «tangibili».

Regola numero 1: senso> stile. Ogni animazione risponde alla domanda «Cos'è successo e cosa c'entra con me?» ».

2) Principi di base

1. Gerarchia del movimento: i contenitori vengono spostati per primi, quindi il contenuto e le parti.
2. Costanza: pattern identici per le stesse azioni.
3. Risparmio: minimo proprietà, minimo fotogrammi Meglio breve e più chiaro.
4. Fisica realistica: accelerazione all'inizio, rallentamento alla fine; Nessun «colpo di scena».
5. «Indietro» si sente specularmente «avanti».
6. Disponibilità: rispetto delle impostazioni di sistema per ridurre l'animazione.

3) Lunghezze e curve (raccomandazioni)

3. 1 Durata (desktop/mobile)

Hover: 120-180 ms

Focus/Pressed: 80–120 мс

Tooltip/Toast: ingresso 180-240 mc, uscita 120-160 mc

Modalk/drowers: 200-320 mc

Transizioni schermate 240-360 ms

Riferimenti scroll/parallax: ≤ 200 ms per segmento, evitare cicli infiniti

3. 2 Curve

Principale: 'cubic-bezier (0. 2, 0. 0, 0. 2, 1) '- ritmo naturale «materiale»

Ingresso più veloce, uscita più morbida: 'cubic-bezier (0. 05, 0. 7, 0. 1, 1)`

Elasticità (raramente, accento): 'cubic-bezier (0. 2, 0. 8, 0. 2, 1. 2) 'con vincolo overshoot ≤ 8px/8 °

Regola: non utilizzare l'interpolazione lineare per spostamenti e opacity contemporaneamente - sensazione di meccanicità.

4) Coreografia delle transizioni

Apparizione: Scala più leggera 0. 98→1. 0 + fade-in, offset 8-16 px sull'asse di comparsa.
Sparizione: ordine inverso, più veloce di ingresso (-20-30%).
Sovrascrivere/cambiare le schede: la base totale (contenitore) viene spostata a 16-24 px; la scheda attiva viene evidenziata prima dell'inizio del movimento.
Elenchi: allentare la cascata (stagger 20-40 mc/elemento, massimo 6-8 elementi).

5) Micro interazioni (patterns)

Pulsante (hover/press) - Ombra + sottile leggero/scale 0. 98; Pressed rimbalza da 80 ≤.
Fuoco: anello di contrasto senza blur; animare spessore/trasparenza, non glow.
Input: carrozza/evidenziazione campo su focus; errori - agitazione 6 px, 140 ms, 1 ciclo.
Toggle/Checkbox: snap fino alla posizione finale, ritardo click massimo 60-80 ms.
Scheleton/caricamento: shimmer 1200-1600 ms, ampiezza di luminosità 20%, senza flash bruschi.

6) Stati dei contenuti

Loading → Success/Empty/Errore: un solo «canale» di movimento; non mescolare direzioni diverse.
Toast/Alerts - Vengono dall'origine dell'evento (ad esempio, in basso a destra per le azioni dell'utente).
Pull to refresh: stretching con scarico elastico; Il tempo di ritorno è di 250 ms.

7) Disponibilità (A11y) e sicurezza

Supporta «prefers-reduced-motion: reduce»: sostituisci gli spostamenti con fade/scale con 1% o transizione statica.
Evitare flash> 3 al secondo e grandi lampeggianti a contrasto (epilessia fotosensiva).
Non usare un forte parallax/zoom negli utenti con una storia di rigonfiamento; Fate un'opzione di disattivazione.
Gli stili di attivazione sono sempre visibili senza animazione (non solo colore/movimento).

8) Prestazioni (60 FPS come obiettivo)

Animare solo opacity e trans (translate/scale/rotate); evitare «top/left/width/height».
Attivare il compositing: 'form: translateZ (0)' o 'will-change':, 'opacity' (moderato).
Per ridurre al minimo i dati, non animare ombre con blur più grandi e filtri su più elementi.
Dividete i grandi passaggi in batch; Usa il requestAnimationFrame.
Per gli elenchi, virtualizzazione/ridefinizione fuori schermo.

9) Token motion in progettazione

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) Implementazione (CSS/JS/React)

Variabili 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, esempio):
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>
);
}

Lotte/SVG: usa per gli stati vuoti illustrativi e onboarding; non per i controlli critici. Ottimizzare e memorizzare la cache.

11) Pattern di download

Skeleton invece di spinner dove la struttura dei contenuti è nota.
Progress: un bar determinato se si conosce il progresso; Indetrizzato, con un ritmo uniforme, senza colpi di scena.
Evitare lo skeleton fluttuante durante la ricostruzione: fissare le dimensioni.

12) Transizioni tra pagine/schermi

Mantenete il punto di attenzione - La scheda viene visualizzata nella parte.
Navigazione verso l'interno, avanti/destra/su, indietro e indietro; la direzione è unita per la piattaforma.
Il sottofondo si oscura fino al 40-60% per gli overlay.

13) Specificità del iGaming

Spin/Reveal: una velocità breve (≤ 200 ms) + rotazione uniforme + morbido; Divieto di cicli infiniti senza effetto.
Win/Jackpot: accensione della luce di 500 ms, senza righe; il suono a basso volume; il testo della vittoria è leggibile (AAA per contrasto).
Tornei/classificazioni: fattura incrementata - contatore con numeri tabellari e passo leggero 40-60 ms/unità (batch), senza «salto» layout.
Gioco responsabile: notifiche e limiti senza effetti distrattivi; animazione minima, attenzione alla leggibilità.

14) Anti-pattern

Ritardi> 120 ms per rispondere al click.
Ascensore da opacity + scale 0. 9→1. 05→1. 0 con overshoot per ogni piccola cosa.
Parallax di sfondo in conflitto con lo scroll.
Infiniti riflessi/pulsazioni.
Animazione delle proprietà layout/paint («height», «left», «filter: blur ()») su più elementi.
Curve non permanenti e durata della stessa azione.

15) Processo e QA

Nel design:
  • Prototipi con tyming/curve; coreografia a livello di cornici.
  • Directory motion-token e esempi per i componenti.
Nello sviluppo:
  • Test unit di visibilità/condizioni (le transizioni sono completate come previsto).
  • Test visivi (snashot della fine delle animazioni).
  • Profilatura (Performance/Timeline) nelle scene con il massimo carico.
Assegno foglio:
  • Supportato'preferers-reduced-motion '.
  • Solo transfer/opacity.
  • Le lunghezze e le curve corrispondono ai token.
  • Nessun flash> 3/s e una stringa forte.
  • Skeleton al posto dello spinner, se possibile.
  • Le transizioni sono reversibili e prevedibili.

16) Documentazione in progettazione

«Motion-token»: duration/easing/stagger con esempi.
Moduli, elenchi, schede, pagine.
A11y & Performance: hyde per reduce-motion e compositing.
«Do/Don't» - Clip brevi con esempi di successo/fallimento.

Breve riepilogo

Motion Design è il linguaggio delle cause e degli effetti. Tenete i timing corti, le curve coerenti e le proprietà a basso costo per il rendering. Rispetto della disponibilità, documentazione dei token e verifica delle prestazioni. In questo modo l'animazione aumenterà l'UX e la velocità e la chiarezza dell'interfaccia.

Contact

Mettiti in contatto

Scrivici per qualsiasi domanda o richiesta di supporto.Siamo sempre pronti ad aiutarti!

Avvia integrazione

L’Email è obbligatoria. Telegram o WhatsApp — opzionali.

Il tuo nome opzionale
Email opzionale
Oggetto opzionale
Messaggio opzionale
Telegram opzionale
@
Se indichi Telegram — ti risponderemo anche lì, oltre che via Email.
WhatsApp opzionale
Formato: +prefisso internazionale e numero (ad es. +39XXXXXXXXX).

Cliccando sul pulsante, acconsenti al trattamento dei dati.