
Il pulsante da far scorrere
Pulsanti, Fisica, Transizioni
NuovaGratis
La pulizia della cache fatta come un parabrezza sotto la pioggia, di notte: ogni goccia è una piccola lente che mostra capovolte e nitide le luci della città dietro il vetro, mentre il vetro bagnato intorno le mostra sfocate. Le gocce grandi scivolano a scatti, lasciano una scia di goccioline e inghiottono quelle che incontrano. Premuto il pulsante partono i due tergicristalli: ogni passata pulisce il suo arco e spinge via l’acqua, la spatola di gomma si ribalta a ogni inversione, e la pioggia torna sempre meno: il vetro pulito è l’avanzamento. Alla fine il vetro si asciuga e un riflesso lo attraversa: 2.4 GB cleared.
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, viewport-fit=cover">
<title>The windscreen wiper cleanup</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/archivo@5.3.0/standard.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<main class="stage">
<!-- the windscreen wiper cleanup: clearing a cache shown as a rainy windscreen at night. Raindrops cover the glass
and each one shows the city lights behind it upside down; the big ones slide, leave a trail and swallow the
small ones. Pressed, the two wipers start: every pass pushes the water away, and less and less rain comes
back, so the clear glass is the progress. At the end the glass is dry and a glint runs across it. The glass,
the lights, the drops and the wipers are painted by script.js on the canvas -->
<section class="wipe" aria-label="Clear cache" data-wipe>
<div class="wipe__glass" role="progressbar" aria-label="Cache clearing progress" aria-valuemin="0" aria-valuemax="100"
aria-valuenow="0" aria-valuetext="Ready to clear 2.4 GB" data-scene>
<canvas class="wipe__paint" aria-hidden="true" data-paint></canvas>
</div>
<div class="wipe__info" aria-hidden="true">
<p class="wipe__title">
<svg class="wipe__tick" viewBox="0 0 24 24" data-tick><path d="M5.5 12.6l4.2 4.2 8.8-9.4" pathLength="1"/></svg>
<span class="wipe__swap" data-title>System cache · 2.4 GB</span>
</p>
<p class="wipe__pct" data-pct>0%</p>
<p class="wipe__meta"><span class="wipe__swap" data-meta>Browsers, thumbnails and logs</span></p>
</div>
<div class="wipe__buttons">
<button class="pill" type="button" data-go data-autoclic><span class="pill__label" data-label>Clear cache</span></button>
</div>
<p class="sr" role="status" 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.
47 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 tergicristallo della pulizia» da Animorio e adattala al mio sitoLa strada dietro il vetro è disegnata una volta sola, due volte: nitida, con le luci come dischi fuori fuoco col bordo più chiaro, e sfocata, con le stesse luci larghe il doppio e più tenui e un velo lattiginoso sopra. Tutte e due sono più larghe del vetro di 40 unità per lato, per le gocce vicino al bordo. Un terzo canvas, a metà risoluzione, è la maschera di quanto il vetro è pulito: a ogni fotogramma si dipinge la città sfocata e sopra quella nitida ritagliata dalla maschera (copy e poi source-in su un canvas di passaggio). I tergicristalli e le gocce che scivolano dipingono la maschera, la pioggia la appanna togliendo un po’ di tutto a ogni fotogramma (destination-out con un alfa di 1 − e^(−6·pioggia·dt)).
Una goccia si disegna come un ritaglio ellittico dentro cui va la città nitida intorno a lei, presa da un quadrato largo 3,2 volte il raggio, capovolta nei due versi (scale(−1, −1)) e rimpicciolita: è quello che fa davvero una goccia su un vetro. Sopra si stira un’immagine sola, fatta una volta: il bordo scuro dove la goccia riflette il buio, una lunetta chiara in basso (un gradiente radiale col centro spostato in alto, che taglia il cerchio solo in basso) e il riflesso in alto a sinistra. Le goccioline troppo piccole per mostrare la città sono un puntino di luce col bordo appena scuro, timbrate una volta per sempre in un quarto canvas, che evapora piano così non si riempie mai.
Ogni goccia ha una soglia sua, intorno a 3,4 unità: sopra la soglia la gravità la tira con forza proporzionale a quanto la supera, un attrito la frena, e a caso il vetro la blocca e la lascia ripartire. Mentre scende si allunga con la velocità, toglie dalla nebbia le goccioline (e un po’ si ingrossa), pulisce una striscia nella maschera e ogni tanto lascia dietro una gocciolina, perdendone l’acqua. Due gocce che si toccano diventano una, con l’area delle due e il centro spostato verso la più grande: le gocce sono ordinate per x e si confrontano solo quelle vicine.
I due bracci sono paralleli e seguono lo stesso angolo: mezzo coseno per la passata, una pausa all’inversione, mezzo coseno per tornare. A ogni fotogramma lo spicchio di corona fra l’angolo di prima e quello di adesso pulisce la maschera e cancella la nebbia. Le gocce dentro lo spicchio si agganciano alla spatola: restano alla loro distanza dal perno e si mettono appena davanti alla gomma, dove si uniscono in una fila di perle (mai più grosse di 4 unità: il resto se ne va oltre il bordo) che perde acqua a ogni fotogramma; quando il braccio inverte le lascia, e scivolano via. La gomma è una molla sull’angolo: si inclina contro la velocità e all’inversione si ribalta con un piccolo rimbalzo.
La pioggia della demo è (1 − avanzamento)^1,25: decide quante gocce arrivano ogni secondo (fino a 180, più sei goccioline per goccia, con un tetto di 300 gocce) e quanto in fretta il vetro si appanna, così ogni passata trova meno acqua della precedente. Arrivati in fondo, i tergicristalli finiscono la passata e si fermano; il vetro si asciuga in 0,9 secondi (le gocce rimaste negli angoli scivolano veloci e svaniscono, la città nitida copre tutto) e un riflesso, un gradiente lineare inclinato in modalità lighter, lo attraversa. Stop fa finire la passata e riporta la pioggia; Clear again fa uno scroscio sette volte più fitto prima di ripartire.
Il vetro è un role=progressbar con aria-valuenow e aria-valuetext aggiornati al massimo ogni mezzo secondo, aria-busy mentre lavora e una riga aria-live per l’inizio, lo stop e la fine; il pulsante resta lo stesso elemento in tutti gli stati. I clic da script (quelli dell’anteprima della libreria) non fermano mai e ripartono solo dopo 2,6 secondi di risultato. Il ciclo di disegno gira solo finché piove o qualcosa si muove, e si ferma quando il vetro esce dallo schermo.
| Nome | File | Di partenza | Cosa cambia |
|---|---|---|---|
SECONDS | script.js | 9 | Quanto dura la pulizia della demo, in secondi (una vera segue i file cancellati). |
ITEMS | script.js | [['Browser caches', 0.92], ['Thumbnails', 0.41], …] | Cosa si cancella, ognuno col suo nome e i suoi gigabyte; il totale sta anche nella scritta a riposo in index.html. |
STROKE | script.js | 0.62 | I secondi di una passata del tergicristallo, da una parte all'altra. |
PAUSE | script.js | 0.09 | La piccola esitazione all'inversione, in secondi. |
SWEEP | script.js | 160 | L'arco di una passata, in gradi: meno di 150 lascia bagnato l'angolo in alto a destra. |
RAIN | script.js | 180 | Le gocce che arrivano sul vetro ogni secondo con la pioggia piena (più sei volte tante goccioline); a riposo ne arriva poco più di un decimo. |
LENS | script.js | 3.2 | Quanto mondo dietro entra in una goccia: più alto, l'immagine capovolta è più piccola e ci stanno più luci. |
SLIDE | script.js | 3.4 | Il raggio oltre il quale una goccia comincia a scivolare, in unità del disegno (il vetro è largo 380). |
GRAVITY | script.js | 150 | Quanto tira giù le gocce grandi, in unità al secondo quadrato. |
WORDS | script.js | { busy: 'Clearing cache', done: 'cleared', stopped: 'Clearing stopped' } | Le scritte sotto il vetro mentre pulisce, alla fine (dopo i gigabyte) e dopo Stop; quella a riposo si cambia in index.html. |
LABELS | script.js | { busy: 'Stop', done: 'Clear again' } | Le scritte del pulsante mentre pulisce e alla fine; quella a riposo, Clear cache, si cambia in index.html. |
Per un’attesa di qualche secondo che toglie qualcosa: svuotare la cache o il cestino, liberare spazio, cancellare i file temporanei, ripulire una cronologia, la manutenzione di un’app per auto o di un servizio di guida. La pioggia che cala dice a che punto si è senza leggere niente, e il vetro limpido alla fine è la ricompensa. Per un’attesa di meno di due secondi è troppo (non si vede nemmeno una passata), e non va in una pagina chiara: è pensato per un’interfaccia scura.
Il componente è largo 380 pixel e sul telefono prende la larghezza dello schermo meno 16 pixel per lato (358 a 390): il disegno si scala con la larghezza e il canvas dipinge alla densità vera dello schermo, fino a due volte, quindi le gocce restano nitide. Le gocce grandi sono al massimo 300, il lavoro più pesante (le due città) si fa una volta sola e il disegno si ferma quando il vetro esce dallo schermo. La pillola è alta 44: col dito si schiaccia e rimbalza; il colpetto dei tergicristalli c’è col mouse e con la tastiera.
Niente pioggia che cade, gocce che scivolano, tergicristalli che si muovono né riflesso finale: il vetro resta bagnato e fermo, e con l’avanzamento le gocce e la nebbia svaniscono in dissolvenza mentre la città nitida compare, insieme alla percentuale. Alla fine il vetro è limpido; le parole cambiano con una dissolvenza e la spunta compare senza disegnarsi.
GSAP 3.15.0, Archivo (font variabile) 5.3.0.
Compressi con gzip, i tre file della demo pesano 15 KB; le librerie: GSAP 28 KB.
Provata il 8 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.