
Il banner dei cookie
Consenso, Transizioni, SVG, Fisica
NuovaGratis
I progetti di uno studio di architettura in un albero di file: una cartella si apre su una molla e i suoi file escono da sotto di lei, vanno un poco oltre e tornano, mentre le linee dei rami si ridisegnano a ogni fotogramma. Un file preso e portato via resta in fondo al suo ramo, che diventa verde, lo segue e si aggancia alla cartella sotto la mano; lasciato lì, il ramo lo tira al suo posto nuovo, lasciato altrove lo riporta a casa.
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 file tree on a leash</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/host-grotesk@5.3.0/index.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<main class="stage">
<!-- an architecture studio's projects in a file tree: folders open on a spring, every branch line is drawn again
each frame from where the rows really are, and a file carried away stays on the end of its branch, which
hooks onto the folder under it and reels the file in when it is let go -->
<section class="explorer" aria-labelledby="explorer-title" data-explorer data-autoclic>
<header class="explorer__head">
<h2 class="explorer__title" id="explorer-title">Projects</h2>
<button class="explorer__tool" type="button" aria-label="Collapse all folders" title="Collapse all folders" data-collapse>
<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M4.75 2.5L8 5.75l3.25-3.25M4.75 13.5L8 10.25l3.25 3.25"/></svg>
</button>
</header>
<div class="explorer__scroll" data-scroller>
<div class="canvas" data-canvas>
<svg class="lines" aria-hidden="true" focusable="false">
<path class="lines__band" data-band/>
<path class="lines__hole" data-hole/>
<path class="lines__guides" data-guides/>
<path class="lines__wire" data-wire/>
</svg>
<div class="tree" role="tree" aria-labelledby="explorer-title" aria-keyshortcuts="Control+X Control+V" data-tree></div>
</div>
</div>
<div class="explorer__foot" data-foot>
<div class="explorer__foot-in">
<p class="explorer__note" data-note></p>
<button class="explorer__undo" type="button" data-undo>Undo</button>
</div>
</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.
45 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 «L’albero al guinzaglio» da Animorio e adattala al mio sitoTutte le righe sono posizionate in assoluto da una sola formula: ogni riga ha una fessura alta quanto una riga moltiplicata per quanto sono aperte le sue cartelle (un numero da 0 a 1, e un poco di più quando la molla va oltre) e per quanto c’è lei stessa; le fessure si impilano dall’alto e la riga sta appoggiata al fondo della sua fessura, ritagliata con clip-path: inset. Così una cartella che si apre fa uscire i suoi file da sotto di sé, le cartelle dentro si aprono insieme, un file che arriva apre il suo posto e uno che parte lascia uno spazio che si richiude, e nessuna riga si sovrappone mai a un’altra.
L’apertura di ogni cartella è una molla smorzata (OPEN_SPRING aprendo, CLOSE_SPRING chiudendo) calcolata sul ticker di GSAP a passi di 1/240 di secondo, col passo del fotogramma limitato a 1/30; la velocità resta, così una cartella cliccata di nuovo a metà torna indietro senza scatti. La freccetta gira di 90 gradi per l’apertura, e quindi va oltre anche lei. Le righe che non si vedono hanno visibility: hidden, così Tab e i lettori di schermo non le trovano; quando niente si muove il ciclo si spegne.
Un solo path SVG sotto le righe, rifatto dalle fessure a ogni fotogramma: per ogni cartella aperta un tronco sotto la freccetta e per ogni riga un rametto con una curva di 6 pixel (una quadratica), lungo quanto la riga è uscita, che si ferma un pixel prima del foglio della riga: il foglio della riga scelta comincia lì, e il ramo lo tiene.
Preso un file (dopo 4 pixel col mouse, dopo PRESS secondi fermi col dito), la sua riga esce dalla formula e segue la mano con translate3d; la sua fessura resta aperta e tratteggiata. Il ramo verde va dalla radice della cartella sotto la mano (la cartella della riga, o la cartella stessa se è la sua riga) al foglio, e la radice scivola da una cartella all’altra su una molla (HOOK_SPRING). Mentre si porta un file nell’albero non si muove niente, così la riga sotto la mano è sempre quella mirata: fermo 0,14 secondi sulla riga di una cartella, il file viene tirato da una molla a pendere sulla riga sotto, col foglio allargato, e il ramo sbiadisce quando non ha posto per piegarsi; dopo HOLD secondi una cartella chiusa si apre da sola.
Lasciato su un’altra cartella, al posto del file resta uno spazio vuoto che si richiude, nella cartella si apre un posto dopo le cartelle in ordine di nome, e il rientro nuovo viene compensato nello spostamento orizzontale nello stesso fotogramma; poi una molla in due dimensioni (LAND_SPRING), partita con la velocità della mano, porta la riga nel posto, e il ramo verde sbiadisce sul rametto grigio. Undo rifà lo stesso volo all’indietro. L’albero segue lo schema ARIA tree con tabindex che si sposta (frecce, Home, Fine, destra apre o entra, sinistra chiude o risale, Invio sceglie o apre) e Ctrl+X, Ctrl+V spostano un file; un clic da script (l’anteprima) porta un file in un altro progetto, annulla, chiude tutto e riapre le cartelle dell’inizio.
| Nome | File | Di partenza | Cosa cambia |
|---|---|---|---|
OPEN_SPRING | script.js | [260, 0.6] | La molla di una cartella che si apre: quanto è rigida e quanto è frenata (sotto 1 i file vanno un poco oltre e tornano). |
CLOSE_SPRING | script.js | [420, 1] | La molla di una cartella che si chiude. |
LAND_SPRING | script.js | [230, 0.74] | La molla che porta un file lasciato al suo posto, in fondo al suo ramo. |
HOOK_SPRING | script.js | [620, 0.9] | La molla della radice del ramo che scivola da una cartella all’altra sotto il file portato, e del file che va a pendere sotto una cartella. |
HOLD | script.js | 0.6 | I secondi sopra una cartella chiusa, portando un file, prima che si apra da sola. |
PRESS | script.js | 0.3 | Su uno schermo da toccare, i secondi da tenere premuto un file prima che si stacchi. |
OPEN_AT_START | script.js | ['Riverside Pavilion', 'Riverside Pavilion/Drawings', 'Harbour Baths'] | Le cartelle aperte all’inizio, col loro percorso. |
TREE | script.js | [['Riverside Pavilion', […]], …] | I progetti: un nome e, per una cartella, quello che contiene. |
Per l’esploratore dei file di un editor nel browser, l’archivio di uno studio, i documenti di un gruppo di lavoro, le risorse di un CMS: ovunque le cose si spostano da una cartella all’altra.
Le righe sono alte 44 pixel e il pannello è largo al massimo 336; un tocco sceglie un file o apre una cartella. Per prendere un file lo si tiene premuto un attimo (PRESS): la riga si scurisce e poi si stacca, e prima di allora il dito che scorre fa scorrere la pagina; mentre il file è in mano la pagina sta ferma. Il pannello non supera 560 pixel: oltre, l’elenco scorre dentro, sotto il titolo compare una linea sottile e il file arrivato fuori vista viene portato in vista.
Le cartelle si aprono e si chiudono subito e le righe che compaiono si accendono in dissolvenza; il file portato segue la mano, che è a muoverlo, ma lasciato va subito al suo posto e ci compare in dissolvenza, senza volo, la radice del ramo non scivola e la cartella non fa il cenno; la riga in fondo al pannello compare senza crescere.
GSAP 3.15.0, Host Grotesk (font variabile) 5.3.0.
Compressi con gzip, i tre file della demo pesano 16 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.