
Il pulsante da far scorrere
Pulsanti, Fisica, Transizioni
NuovaGratis
Il timer per le uova di un’app di cucina, con l’uovo tagliato a metà che cuoce davvero mentre il tempo scende: il calore dell’acqua entra dal guscio come nella fisica vera, l’albume diventa bianco dal bordo verso il centro e il tuorlo si rapprende dal suo bordo. Morbido, bazzotto o sodo vengono fuori da soli. Allo scadere l’uovo esce dall’acqua con un saltello e il tuorlo trema tanto quanto è ancora liquido.
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 egg timer</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/rubik@5.3.0/index.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<main class="stage">
<!-- the egg timer: the egg is drawn cut in half, and while the time runs down it cooks from the shell inwards,
worked out as heat that really moves through the white and into the yolk. When the time is up the egg is
lifted out of the water and its yolk wobbles as much as it is still runny -->
<section class="egg" aria-label="Egg timer" data-timer>
<div class="egg__pan" data-pan>
<canvas class="egg__canvas" aria-hidden="true" data-canvas></canvas>
</div>
<div class="egg__readout" data-readout>
<span class="egg__time" role="timer" aria-live="off" aria-atomic="true">
<span class="egg__digits" aria-hidden="true" data-time></span>
<span class="sr" data-time-words></span>
</span>
<p class="egg__state"><span class="egg__word" data-word></span><span class="egg__detail" data-detail></span></p>
</div>
<fieldset class="kinds" data-kinds>
<legend class="sr">How you like your egg</legend>
<span class="kinds__pill" aria-hidden="true" data-pill><span class="kinds__copy" data-pill-copy></span></span>
</fieldset>
<div class="egg__controls" data-controls>
<button class="egg__reset" type="button" aria-label="Start over" aria-disabled="true" data-reset>
<span class="egg__turn">
<svg viewBox="0 0 24 24" aria-hidden="true" data-reset-icon><path d="M5.6 9.2A7.2 7.2 0 1 1 4.9 14.2"/><path d="M5.2 4.6v4.8H10"/></svg>
</span>
</button>
<button class="egg__go" type="button" data-go data-autoclic>
<span class="egg__go-words" data-go-words>Start</span>
</button>
<span class="egg__balance" aria-hidden="true"></span>
</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.
31 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 timer dell’uovo» da Animorio e adattala al mio sitoIl taglio è un semipiano intorno all’asse lungo dell’uovo: z lungo l’uovo, r dall’asse, in celle di 0,75 mm (76 per 30). Ogni cella è in realtà un anello, e il calore passa dalle sue quattro facce in proporzione alla loro area: verso l’esterno (i+1)/(i+½), verso l’asse i/(i+½), sopra e sotto 1. È l’equazione del calore in coordinate cilindriche, a volumi finiti, con la conducibilità e la capacità termica dell’albume e del tuorlo (media armonica sulle facce fra i due) e l’acqua a WATER gradi fuori dal guscio. Il passo di tempo è il più lungo che resta stabile, e ogni cella ricorda la temperatura più alta che ha raggiunto: le proteine non tornano indietro.
Due tabelle di 481 colori, un quarto di grado alla volta, dicono che cosa fa la temperatura: l’albume è trasparente fino a 58 gradi, lattiginoso fino a 66 e bianco sodo verso 80; il tuorlo resta liquido fino a 60, diventa marmellata fino a 65, si rapprende fino a 70 e si fa giallo chiaro sopra. Due livelli, l’albume e il tuorlo, si dipingono pixel per pixel su due canvas nascosti: per ogni pixel la cella e i pesi dell’interpolazione bilineare si calcolano una volta sola, così dipingere vuol dire quattro letture e una tabella. Il tuorlo ha un velo lucido e un punto di luce solo dove è ancora liquido, e una grana dove è sodo.
Il contorno è la curva dell’uovo, y = (B/2)·√((L²−4x²)/(L²+8wx+4w²)), con w che porta la parte più larga verso il fondo; la pelle sotto il guscio è lo stesso contorno spostato lungo le normali. L’albume si disegna dentro il contorno sopra una sagoma nera, così le bollicine che passano dietro non si vedono attraverso l’albume crudo; il tuorlo dentro il suo cerchio, che può tremare per conto suo. L’albume sotto il tuorlo legge la temperatura appena fuori dal tuorlo, così quando il tuorlo si schiaccia sotto non compare un buco.
Le bollicine nascono sul guscio, soprattutto sotto e ai lati, crescono attaccate e poi si staccano e salgono sempre più in fretta, ondeggiando. L’uovo dondola con due seni sfalsati finché bolle. A zero una timeline GSAP lo fa accucciare, saltare, ricadere schiacciato (lo schiacciamento tiene fermo il fondo dell’uovo) e tornare su con un elastic.out; all’atterraggio il tuorlo oscilla come una molla smorzata, scala (1+j, 1−j) intorno al suo centro, con ampiezza, frequenza e smorzamento presi da quanto tuorlo è ancora liquido, così un uovo morbido trema a lungo e uno sodo quasi niente, e tutto finisce entro un secondo e mezzo.
Il tempo che resta viene dall’orologio (performance.now), e l’uovo si calcola fino al punto in cui dice l’orologio: una scheda rimasta in background finisce in orario e cotta giusta. Con DEMO il tempo vero viene compresso (sette minuti in venti secondi) ma l’uovo cuoce col tempo che si legge; le cifre allora cambiano senza rotolare. role="timer" con aria-live off, e una regione aria-live che parla solo ai cambi di stato e alla fine. Il clic dell’anteprima (detail 0) fa solo cominciare e riprendere, e dopo la fine aspetta un poco prima di prendere un uovo nuovo.
| Nome | File | Di partenza | Cosa cambia |
|---|---|---|---|
EGGS | script.js | [['Soft', 330], ['Jammy', 420], ['Hard', 600]] | I modi di fare l’uovo: il nome e i secondi in acqua. |
CHOSEN | script.js | 1 | Il modo scelto quando si apre la pagina: 0 è il primo. |
DEMO | script.js | 20 | Per provarlo, un uovo intero cuoce in questi secondi (le cifre mostrano comunque i minuti veri); 0 = nel tempo vero. |
START | script.js | 4 | La temperatura dell’uovo quando entra in acqua, in gradi: 4 dal frigo, 20 dalla dispensa (cuoce prima). |
WATER | script.js | 100 | L’acqua, in gradi: 100 a bollore pieno; sotto i 65 il tuorlo non si rapprende mai. |
BUBBLES | script.js | 1 | Quanto bolle l’acqua intorno all’uovo: 0 = niente bollicine. |
WOBBLE | script.js | 1 | Quanto trema un tuorlo liquido quando l’uovo esce dall’acqua: 0 = per niente. |
Per il timer di un’app di ricette o di cucina, di un forno o di una pentola intelligenti, di un’app per la colazione: dove chi aspetta vuole sapere non solo quanto manca ma come sta venendo. Lo stesso calcolo funziona per qualunque cosa cuocia dal bordo verso il centro (un arrosto, un pane, un dolce) cambiando forma e temperature.
Il componente è largo 360 pixel e a 390 si stringe a 358 senza sforare. I tre modi sono alti 52 pixel, i pulsanti 48 e 56. Il calcolo del calore costa pochissimo (circa 1700 celle); i due livelli si dipingono al massimo trenta volte al secondo mentre l’uovo cuoce, e mai quando è fermo.
L’uovo cuoce lo stesso, perché è il tempo: l’albume e il tuorlo cambiano colore senza che niente si muova. Niente bollicine, niente dondolio né affondo, niente salto e niente tremolio alla fine: compaiono Done e il verdetto in dissolvenza. L’uovo nuovo arriva in dissolvenza, la pillola dei tre modi si sposta senza scivolare e le cifre cambiano senza rotolare.
GSAP 3.15.0, Rubik (font variabile) 5.3.0.
Compressi con gzip, i tre file della demo pesano 15 KB; le librerie: GSAP 28 KB.
Provata il 7 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.