
Il pulsante a strati
Pulsanti, Hover, Fisica
Gratis
I volti di chi va a una cena, sovrapposti: vicino al puntatore si allargano su molle e quello sotto sale un poco col suo nome; il +4 si apre nei volti che nascondeva, che ne escono uno dopo l’altro, e Join fa cadere nel gruppo un volto nuovo con un rimbalzo.
Una cartella che funziona da sola: index.html, style.css, script.js e le librerie da CDN. Nelle schede React e Vue la stessa demo è già un componente, che spegne le sue animazioni quando esce dalla pagina.
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>The avatar group</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/kumbh-sans@5.3.0/index.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<main class="stage">
<!-- the avatar group: the faces draw apart around the pointer on springs, the one under it rises with its name,
the +4 opens into the faces it hid, and joining drops a new face into the group -->
<section class="going" aria-labelledby="going-title" data-going data-autoclic>
<h2 class="going__title" id="going-title">Friday dinner</h2>
<p class="going__where">Trattoria del Ponte · 8 pm</p>
<div class="going__stack" data-stack>
<ul class="going__list" aria-label="Who is going" data-list></ul>
<button class="going__more" type="button" aria-expanded="false" data-more>
<span class="going__more-text" data-more-text></span>
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M7 12h10"/></svg>
</button>
</div>
<div class="going__foot">
<p class="going__count"><span class="going__num" data-num></span> going</p>
<button class="going__join" type="button" data-join><span data-join-text>Join</span></button>
</div>
<p class="sr" aria-live="polite" data-live></p>
</section>
</main>
<script src="https://cdn.jsdelivr.net/npm/gsap@3.15.0/dist/gsap.min.js"></script>
<script src="script.js"></script>
</body>
</html>Cambia valori, colori e testi con le manopole e guarda l’animazione rispondere dal vivo. Oppure scrivi tu nel codice. Poi scarica la cartella con le tue modifiche.
35 valori da cambiare
Col connettore di Animorio, Claude Code la prende da qui con tutta la sua guida e la adatta al tuo progetto. Incolla questa richiesta:
Prendi «Il gruppo di avatar» da Animorio e adattala al mio sitoOgni volto ha il suo posto nella fila: un passo di 46 − OVERLAP pixel dal precedente, o meno se la fila non ci starebbe (con tutti i volti, al telefono, si stringono). La loro x, la loro altezza e la loro scala vanno ai posti su molle (SPRING), calcolate sul ticker di GSAP a passi di 4 millisecondi; il primo volto sta sopra gli altri.
Ogni spazio fra due volti cresce di SPREAD × e^(−(d ÷ REACH)²), dove d è la distanza fra il puntatore e il centro dello spazio: i volti vicini al puntatore si allontanano di più. Il volto più vicino, misurato sui posti fermi (così non scappa via), sale di 6 pixel e si ingrandisce a 1,12, e il suo nome compare sotto. Sopra il +4 la fila non si allarga, così il +4 resta fermo sotto il puntatore.
I volti oltre i primi SHOWN aspettano dentro il tondo +N, piccoli e trasparenti. Aprendolo, escono uno ogni 0,07 secondi, crescendo da 0,4 a 1 sulle loro molle, mentre il tondo segue la fila fino in fondo e il numero lascia il posto a un segno meno; chiudendolo, tornano dentro il tondo e svaniscono.
Il volto nuovo parte 70 pixel più in alto, inclinato, e scende al primo posto su una molla più morbida che rimbalza; gli altri si spostano di un passo. Il numero rotola: il vecchio esce dalla parte del cambiamento e il nuovo entra dall’altra (con immediateRender false, perché il vecchio esca davvero). Leave fa cadere il volto di 36 pixel, girando e svanendo.
I volti sono un elenco con un solo arresto per il Tab: le frecce (e Inizio e Fine) passano da un volto all’altro, e quello con la focalizzazione allarga gli altri e mostra il nome come farebbe il puntatore; il +N è un pulsante con aria-expanded, e una regione aria-live dice chi va e quando l’elenco si apre. Al telefono un tocco su un volto lo solleva col suo nome. Un clic da script (l’anteprima della libreria) è un puntatore finto che passa lungo i volti, apre il +N, ci ripassa, entra nel gruppo, richiude e se ne va.
| Nome | File | Di partenza | Cosa cambia |
|---|---|---|---|
OVERLAP | script.js | 14 | Di quanti pixel ogni volto finisce sotto il successivo. |
SPREAD | script.js | 22 | Di quanti pixel si allontanano i volti vicini al puntatore. |
REACH | script.js | 64 | Fin dove arriva, in pixel, l’attrazione del puntatore. |
SPRING | script.js | [360, 0.68] | La molla dei volti: quanto è rigida e quanto è frenata. |
SHOWN | script.js | 5 | Quanti volti si vedono prima del +N. |
PEOPLE | script.js | [['Ana Ruiz', '#f4a67c'], …] | Chi va, ognuno col colore del suo volto. |
Per chi partecipa a un evento, i membri di un progetto o di un gruppo, chi sta guardando un documento, gli ospiti di una prenotazione, i clienti che hanno lasciato una recensione.
La fila si stringe per stare nella larghezza dello schermo, anche con tutti i volti aperti; un tocco su un volto lo solleva e ne mostra il nome finché il dito non si alza.
I volti vanno subito ai loro posti, senza molle: si allargano, si aprono e si richiudono di colpo, il volto nuovo compare al suo posto senza cadere, il numero cambia senza rotolare e il nome compare senza dissolvenza.
GSAP 3.15.0, Kumbh Sans (font variabile) 5.3.0.
Compressi con gzip, i tre file della demo pesano 7,1 KB; le librerie: GSAP 28 KB.
Provata il 3 ottobre 2026
Puoi usarla nei tuoi progetti e in quelli dei tuoi clienti. Non puoi rivenderla né ridistribuirla così com’è. GSAP resta sotto la sua licenza Standard. Licenza completa.
Con l’email e la password del tuo account.
oppure con l’email
Hai fatto l’accesso come .
Con l’account scarichi lo zip di ogni animazione e di ogni pacchetto, gratis.