
Le storie a cubo
Storie, 3D, Transizioni
NuovaGratis
La notifica di un’app di documenti condivisi fatta di carta vera, con la grana e un’ombra morbida. Chiusa, non sparisce: si piega da sola in un aeroplanino, piega dopo piega, e l’aeroplanino vola via con una curva mentre la sua ombra resta indietro sulla pagina. La notifica dopo arriva come un foglio piegato e si apre; sotto il puntatore l’angolo più vicino si arriccia.
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 paper notification</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/hanken-grotesk@5.3.0/index.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<main class="stage" data-stage>
<!-- the notification of a shared-documents app, made of real paper. Dismissed (the cross, Esc, or a swipe
sideways) it folds itself into a paper plane, fold after fold, and the plane flies away; the next one arrives
as a folded sheet and opens. Open lifts the sheet towards you. The words are filled in by script.js, from
MESSAGES; while it folds, the paper is drawn by copies of the card, cut along the creases and turned in 3D -->
<canvas class="shadow" aria-hidden="true" data-shadow></canvas>
<div class="note" data-note>
<div class="note__mover" data-mover>
<section class="card is-hidden" aria-label="Notification" data-card>
<span class="card__face" aria-hidden="true" data-face></span>
<span class="card__text">
<span class="card__title" data-title></span>
<span class="card__body" data-body></span>
</span>
<button class="card__open" type="button" data-open>Open</button>
<button class="card__close" type="button" aria-label="Dismiss notification" data-close data-autoclic>
<svg viewBox="0 0 24 24" aria-hidden="true"><path d="M7 7l10 10M17 7L7 17"/></svg>
</button>
</section>
<canvas class="cast" aria-hidden="true" data-cast></canvas>
<div class="folds" aria-hidden="true" inert data-folds></div>
</div>
<p class="sr" role="status" aria-live="polite" aria-atomic="true" 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.
36 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 «La notifica di carta» da Animorio e adattala al mio sitoLa carta è un elenco di facce piane, ognuna un pezzo della notifica tagliato lungo le pieghe fatte fin lì. Una piega è una linea sulla carta come sta in quel momento e il lato da girare: ogni faccia che la linea attraversa, su ogni strato, si taglia in due (il taglio si calcola dove la faccia sta adesso, ma i pezzi si scrivono nelle coordinate della notifica piatta), e i pezzi da quel lato girano di 180 gradi attorno alla linea. L’asse sta mezzo spessore di carta sopra la pila (sotto, per una piega all’indietro): uno strato rovesciato atterra sopra gli altri nell’ordine giusto, come nella carta vera.
Le pieghe si calcolano una volta, a fondo. Ogni pezzo ricorda le sue pieghe come assi riportati sulla notifica piatta: l’asse di una piega, visto nel mondo quando le pieghe prima sono finite, si riporta indietro con l’inverso delle rotazioni che il pezzo ha già fatto. Così un istante qualsiasi è solo il prodotto delle rotazioni di quel pezzo (formula di Rodrigues), dalla prima all’ultima, all’angolo a cui GSAP è arrivato; le pieghe possono anche sovrapporsi nel tempo, e la chiglia dell’aeroplanino si apre di 26 gradi semplicemente togliendo angolo alla piega a metà.
Ogni faccia è una copia della notifica (senza id, data- o aria-, dentro un contenitore inert), ritagliata col clip-path del suo pezzo, allargato di mezzo pixel per lato perché fra due pezzi non resti una giuntura, e girata con un matrix3d. Il contenitore ha la prospettiva ma non preserve-3d: l’ordine lo decide lo script. Una faccia sta davanti a un’altra se tutti i suoi vertici stanno dal lato dell’occhio rispetto al piano dell’altra (o viceversa); le coppie che si sovrappongono sullo schermo danno un grafo, e le facce escono dalla più lontana fra quelle libere.
Ogni faccia ha un velo: più scuro quanto più la sua normale si allontana dalla lampada rispetto al foglio piatto, più chiaro quando le si avvicina. Si vede il davanti o il retro secondo il lato dell’occhio; il retro è carta con la stampa che traspare appena, e il fuori della lettera piegata è il retro del terzo di destra, girato e quindi a specchio. L’ombra sta su un canvas sotto la carta: ogni faccia si proietta sulla pagina lungo la luce, in tre strati dal più netto al più morbido, e più si alza più l’ombra si sposta, si allarga e si schiarisce.
L’angolo vicino al puntatore è fatto di sei strisce, ognuna incernierata sulla precedente, con l’arricciatura che cresce verso la punta (fino a CURL gradi) e una molla con un po’ di rimbalzo; la notifica vera si ritaglia proprio lì. Ogni striscia ha una sfumatura dalla luce della striscia prima a quella dopo, così le strisce si leggono come una curva, e un secondo canvas fra la carta e le facce riceve l’ombra dell’angolo sulla carta stessa.
Finita la piega, l’aeroplanino si inclina per mostrare le ali, si solleva e segue una curva di Bézier in 3D: il muso segue la tangente, sale un poco e si inclina nella virata in proporzione a quanto la direzione cambia. Uno swipe di lato oltre un terzo della larghezza (o veloce) lo fa partire da quella parte, col muso piegato verso quel lato. I pulsanti sono veri, col focus visibile; Esc chiude, il fuoco resta sulla croce per la notifica dopo, e una riga role="status" legge ogni notifica nuova.
| Nome | File | Di partenza | Cosa cambia |
|---|---|---|---|
FOLD | script.js | 1.5 | I secondi in cui la notifica si piega in un aeroplanino. |
FLIGHT | script.js | 1.2 | I secondi del volo dell’aeroplanino. |
UNFOLD | script.js | 0.85 | I secondi in cui una notifica nuova arriva piegata e si apre. |
CURL | script.js | 80 | Quanto si arriccia al massimo l’angolo vicino al puntatore, in gradi: lontano dall’angolo un terzo, vicino tutto. |
LIGHT | script.js | 0.8 | Quanto cambia la luce su una faccia che gira: 0 niente, 1 molto. |
GRAIN | script.js | 0.07 | La grana della carta: 0 liscia, 0.2 ruvida. |
KEEL | script.js | 0.3 | Quanto è profonda la chiglia dell’aeroplanino, rispetto a metà dell’altezza del foglio: più bassa, ali più larghe. |
DEPTH | script.js | 900 | Quanto è lontano l’occhio, in pixel: meno sembra più profondo. |
FIRST | script.js | 0.4 | I secondi prima che arrivi la prima notifica. |
MESSAGES | script.js | quattro, da Mira Okafor “Q4 roadmap” a Jonas Weber “Hiring 2027” | I documenti condivisi, a turno: chi, il documento, la riga sotto e il colore dietro le iniziali. |
Per una notifica che porta qualcosa di concreto, come un documento condiviso, un invito, una lettera, e che si chiude con un gesto: un’app di documenti, una casella di posta, un gestionale con un tocco artigianale. Una notifica alla volta, con una riga di titolo e una di dettaglio; il ripiegamento dura un secondo e mezzo, quindi sta meglio dove le notifiche non arrivano a raffica.
La notifica prende la larghezza dello schermo meno 32 pixel (358 a 390), e sotto i 420 pixel gli spazi e il titolo si stringono un poco perché le parole ci stiano tutte. Uno swipe di lato la chiude: l’aeroplanino ha il muso verso quel lato e vola via da quella parte, e il foglio rientra un poco nello schermo mentre si piega. Tenendo il dito sulla carta l’angolo più vicino si solleva; la croce ha un’area di tocco più grande di quella disegnata.
Niente pieghe, niente volo e niente angoli che si arricciano: la notifica compare e se ne va in dissolvenza, con la croce, con Esc, con Open o con uno swipe, e la notifica dopo compare in dissolvenza. La grana, l’ombra e le due pieghe leggere restano.
GSAP 3.15.0, Hanken Grotesk (font variabile) 5.3.0.
Compressi con gzip, i tre file della demo pesano 18 KB; le librerie: GSAP 28 KB.
Provata il 6 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.