
Il pulsante da far scorrere
Pulsanti, Fisica, Transizioni
NuovaGratis
Il Sign in d'ufficio col badge: un tesserino appeso al cordino di un avvolgicavo a molla sopra la pillola, e la pillola è il lettore, con una fessura lungo il bordo in alto. Al clic il badge viene tirato giù, entra nella fessura dietro il fronte della pillola, la striscia magnetica scorre fino in fondo con una riga di luce sotto, il lettore risponde Signing in… e poi Signed in · Rui Costa; lasciato, l'avvolgicavo riavvolge il cordino e il badge risale oscillando. Sign out lo infila nel lettore, lo fa uscire e torna appeso. Il badge si può anche prendere e strisciare a mano.
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 badge swipe button</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/mona-sans@5.3.0/wdth.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<main class="stage">
<!-- the badge swipe button: the Sign in of an office, a studio or a lab. An ID badge hangs on a spring reel over the
pill, and the pill is the reader: a slot runs along its top edge. A click pulls the badge down, swipes it
through the slot and lets it go: the reel winds the cord back in and the badge swings. Signing out dips the
badge into the reader and it comes out and hangs again. The badge can also be grabbed and swiped by hand -->
<div class="swipe" data-swipe>
<!-- the reel, the cord and the badge, drawn by the script, between the back of the slot and the front of the pill -->
<canvas class="swipe__rig" aria-hidden="true" data-rig></canvas>
<span class="swipe__grip" aria-hidden="true" data-grip></span>
<button class="swipe__btn" type="button" data-btn data-autoclic>
<span class="swipe__back" aria-hidden="true"></span>
<span class="swipe__front" aria-hidden="true"></span>
<span class="swipe__faces">
<span class="swipe__face" data-face="rest">
<span class="swipe__word" data-wide="Sign in" data-rest-text>Sign in</span>
</span>
<span class="swipe__face swipe__face--busy" data-face="busy" aria-hidden="true">
<span class="swipe__shine" data-busy-text>Signing in…</span>
</span>
<span class="swipe__face swipe__face--done" data-face="done" aria-hidden="true">
<span class="swipe__who"><span data-done-text>Signed in</span> · <b data-name-text>Rui Costa</b></span>
<span class="swipe__out" data-out-text>Sign out</span>
</span>
<span class="swipe__face swipe__face--busy" data-face="gone" aria-hidden="true">
<span class="swipe__gone" data-gone-text>Signed out</span>
</span>
</span>
</button>
<p class="sr" aria-live="polite" data-live></p>
</div>
</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.
27 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 pulsante del badge» da Animorio e adattala al mio sitoLa pillola è fatta di due strati: il fondo della fessura, scuro, dietro la tela, e il fronte, tagliato 10 pixel sotto il bordo con clip-path, davanti. Il pulsante non ha z-index suo, quindi la tela col badge sta in mezzo: quando il badge scende nella fessura sparisce dietro il fronte, e non copre mai la scritta.
Il cordino è una catena di dodici punti: a ogni passo la gravità e l'aria spostano i punti, poi dieci giri di vincoli rimettono a posto le maglie, che si possono allentare ma non allungare, e la velocità nasce da dove i punti sono finiti. Il badge è un corpo rigido appeso all'ultimo punto: la clip e il suo centro, a distanza fissa, così oscilla come un pendolo vero.
La lunghezza del cordino cambia: quando la mano tira, l'avvolgicavo dà tutto il cordino che serve; lasciato, la molla lo riavvolge a velocità REEL, frenando sull'ultimo tratto come un avvolgicavo vero. Il badge viene tirato su, il cordino si allenta e lui ricade e oscilla. La faccia dell'avvolgicavo gira con il cordino che entra ed esce.
Durante la strisciata la clip e il centro del badge seguono una mano mossa da una timeline GSAP: giù dritto, dentro la fessura, lungo tutta la fessura, fuori. Lasciato, il badge tiene la velocità che la mano gli ha dato e prende un colpetto di torsione sulla cinghietta, una molla a parte che lo stringe in larghezza come se girasse.
Fuori dalla mano il cordino e il badge non passano la pillola: l'angolo più basso del badge si appoggia sul suo bordo e scivola, e il badge non può girare sopra l'avvolgicavo. Trascinato a mano, il badge entra nella pillola solo dalla fessura e solo fino alla sua profondità; il lettore conta quanta fessura ha percorso.
| Nome | File | Di partenza | Cosa cambia |
|---|---|---|---|
LABEL | script.js | 'Sign in' | La scritta a riposo. |
BUSY | script.js | 'Signing in…' | La scritta mentre il lettore legge il badge. |
DONE | script.js | 'Signed in' | La scritta una volta dentro, prima del nome. |
PERSON | script.js | 'Rui Costa' | Il nome sul badge e nella scritta (inventato: non si manda niente da nessuna parte). |
ROLE | script.js | 'Studio' | La parola piccola sotto il nome, sul badge. |
LOGOUT | script.js | 'Sign out' | La piccola pillola che fa uscire. |
LEAVING | script.js | 'Signing out…' | La scritta mentre esce. |
GONE | script.js | 'Signed out' | La scritta una volta fuori, prima di tornare a Sign in. |
SWIPE | script.js | 0.6 | I secondi della strisciata lungo la fessura. |
GRAVITY | script.js | 2200 | Quanto forte cade il badge, in pixel al secondo al quadrato. |
REEL | script.js | 420 | Quanto in fretta l'avvolgicavo riavvolge il cordino, in pixel al secondo. |
AIR | script.js | 1.1 | Quanto l'aria frena le oscillazioni: 0.2 oscilla a lungo, 4 quasi non oscilla. |
Per l'accesso di un'app di lavoro: un'intranet, uno studio, un coworking, un laboratorio, il pannello di un ufficio. Sta da solo su fondo chiaro; in un sito vero la funzione che entra davvero va al posto della strisciata, e il nome arriva dall'account.
La pillola si stringe allo schermo (al massimo larga quanto lo schermo meno 32 pixel) e la fessura con lei; il badge resta della sua misura. Il tocco sulla pillola fa la strisciata; il badge si prende anche col dito, e mentre lo si tiene la pagina non scorre.
Niente oscillazioni né strisciate: il badge si spegne dove è appeso e si riaccende già nella fessura, fermo, con la riga di luce in dissolvenza; poi si spegne e si riaccende appeso. Le scritte cambiano in dissolvenza e la pillola non si gonfia.
GSAP 3.15.0, Mona Sans (font variabile) 5.3.0.
Compressi con gzip, i tre file della demo pesano 13 KB; le librerie: GSAP 28 KB.
Provata il 9 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.