
Il menu a mazzetta di colori
Menu, Fisica, Transizioni, Hover
NuovaGratis
Il menu degli strumenti di un editor di foto come una cassetta degli attrezzi di metallo blu con i vassoi a sbalzo. Chiusa è il pulsante; premuta, il fermo cade e dondola, i vassoi salgono e si allargano a gradini sui loro bracci incernierati, sempre in piano, e sbattono contro l’arresto con un rimbalzo; poi i coperchi si ribaltano come pannelli porta attrezzi. In ogni vassoio c’è un attrezzo che è un’azione: sotto il puntatore si solleva, scelto esce dalla cassetta, che si richiude con lo scatto del fermo.
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 toolbox menu</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/archivo@5.3.0/wdth.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<main class="stage">
<!-- the toolbox menu: the actions of a photo editor as the trays of a cantilever toolbox. Closed, the box is the
button. Pressed, the latch flips, the trays rise and step outwards on their hinged arms (two parallel arms
per tray, so every tray stays level) and the lids swing back like tool boards. The metal, the arms and the
tools are painted on the canvas; the buttons on top of it are the real menu -->
<div class="box" data-box>
<canvas class="box__paint" aria-hidden="true" data-paint></canvas>
<button class="lid-button" type="button" aria-haspopup="menu" aria-expanded="false" aria-controls="toolbox-menu" data-toggle data-autoclic>
<span class="plate" aria-hidden="true" data-plate>
<span class="plate__face" data-face><span class="plate__word">Tools</span></span>
</span>
<span class="sr" data-name>Tools</span>
</button>
<div class="trays" id="toolbox-menu" role="menu" aria-label="Photo tools" tabindex="-1" data-menu inert>
<button class="tray" type="button" role="menuitem" tabindex="-1" data-tray="crop" data-autoclic>
<span class="tray__label" data-label>Crop</span>
</button>
<button class="tray" type="button" role="menuitem" tabindex="-1" data-tray="adjust">
<span class="tray__label" data-label>Adjust</span>
</button>
<button class="tray tray--board" type="button" role="menuitem" tabindex="-1" data-tray="retouch">
<span class="tray__label" data-label>Retouch</span>
</button>
<button class="tray tray--board" type="button" role="menuitem" tabindex="-1" data-tray="straighten">
<span class="tray__label" data-label>Straighten</span>
</button>
</div>
</div>
<p class="sr" aria-live="polite" data-say></p>
</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 menu a cassetta degli attrezzi» da Animorio e adattala al mio sitoOgni vassoio è appeso a due bracci paralleli della stessa lunghezza, imperniati sul genitore: la cassetta per i vassoi di sotto, il vassoio di sotto per quelli di sopra. Lo script conosce solo dove sta il vassoio chiuso e dove deve arrivare aperto: il perno deve stare alla stessa distanza dalla punta del braccio nei due posti, quindi sull’asse del segmento che li unisce. Di quella retta prende il punto più vicino a dove lo vorrebbe, tenuto dentro la faccia del genitore; da lì vengono la lunghezza del braccio e i suoi due angoli. A ogni fotogramma la posizione del vassoio è la punta del braccio meno il punto d’attacco: il vassoio non ruota mai e segue un arco vero.
L’apertura di ogni braccio è un numero da 0 a 1 con la sua velocità. Una molla smorzata mira un poco oltre l’arresto (1,08 aprendo, -0,08 chiudendo), così il vassoio ci arriva con velocità: lì rimbalza tenendo BOUNCE della sua velocità e la molla lo rispinge contro, finché si posa. Ogni urto dà una spinta a una molla rigida che abbassa la cassetta di un pixel o due. La fisica gira sul ticker di GSAP in passi da 1/240 di secondo, col passo del fotogramma limitato a 1/30, e i vassoi di sopra partono STAGGER secondi dopo.
Il coperchio dei vassoi di sopra gira su una cerniera dietro al vassoio. Visto di fronte, il suo lato interno si vede alto quanto la profondità per il seno dell’angolo, e il suo bordo spesso quattro unità per il coseno: lo script disegna il pannello con scale(1, seno) e ci mette dentro gli attrezzi e le loro sagome, scuriti finché il coperchio è quasi piatto. Si apre su una molla poco smorzata quando il vassoio ha passato il 62 per cento della corsa, e si richiude per primo.
Lamiera, bracci, rivetti, attrezzi e ombre sono disegnati su un canvas a ogni fotogramma, ma solo finché qualcosa si muove. Le fasce di vernice hanno una sfumatura verticale col bordo arrotolato chiaro, la grana martellata (una piastrella di ammaccature morbide ripetuta) e i fianchi più scuri; i bracci hanno la sfumatura di traverso con il lato chiaro sempre verso l’alto, comunque girino. Le ombre del canvas non seguono la trasformazione, quindi sfocatura e spostamento sono moltiplicati per la scala a mano.
Sopra il canvas ci sono dei button veri: la cassetta, con aria-expanded e aria-controls, e quattro voci role=menuitem che lo script sposta a ogni fotogramma sopra i loro vassoi, con il nome stampato in testo vero. Le frecce passano da una voce all’altra, Home ed End vanno alla prima e all’ultima, una lettera alla voce che comincia così; Esc e Tab richiudono e rendono il fuoco alla cassetta. Il menu chiuso è inert.
| Nome | File | Di partenza | Cosa cambia |
|---|---|---|---|
REACH | script.js | 134 | Quanto lontano dal centro stanno i vassoi di sopra a cassetta aperta, in pixel; i perni dei bracci si ricalcolano da soli. |
RISE | script.js | 112 | Quanto in alto, dal fondo della cassetta, stanno i vassoi di sopra a cassetta aperta, in pixel. |
SPRING | script.js | 48 | Quanto forte le molle dei bracci lanciano i vassoi verso l’arresto. |
BOUNCE | script.js | 0.34 | Quanta velocità tiene un vassoio quando sbatte contro l’arresto (0 niente, 0,6 vivace). |
STAGGER | script.js | 0.07 | I secondi fra la partenza dei vassoi di sotto e quella dei vassoi di sopra. |
LID | script.js | 100 | Di quanti gradi si ribaltano i coperchi. |
LIFT | script.js | 9 | Quanto si solleva un attrezzo sotto il puntatore, in pixel. |
HOLD | script.js | 1.6 | I secondi in cui la targhetta dice che cosa è stato fatto. |
OPEN_WORD | script.js | 'Close' | Che cosa dice la targhetta mentre la cassetta è aperta. |
DONE_WORDS | script.js | ['Cropped', 'Adjusted', 'Retouched', 'Straightened'] | Che cosa dice la targhetta dopo ogni attrezzo, nell’ordine del menu. |
Per il menu degli strumenti o delle azioni di un editor (foto, video, progetti, siti) o di un’app con un carattere da oggetto: un negozio di bricolage, un servizio di riparazioni, uno strumento per creativi. Quattro azioni brevi, una per vassoio; per averne sei bisogna aggiungere un piano di vassoi e allargare la cornice.
La cornice è larga 384 unità e a 390 pixel si stringe a circa 0,93: la cassetta chiusa resta alta 56 pixel e quella aperta sta dentro lo schermo, coi nomi ancora leggibili. Il tocco apre e chiude come il clic; il dito che preme una voce solleva il suo attrezzo come il puntatore, e lasciandolo lo sceglie.
Niente bracci che girano, niente rimbalzi e niente colpi: la cassetta si dissolve e ricompare aperta o chiusa, l’attrezzo sotto il puntatore non si solleva ma il nome sul vassoio si schiarisce, e scegliendo un’azione la cassetta si dissolve chiusa con la targhetta che dice che cosa è stato fatto. Le parole della targhetta si dissolvono invece di rotolare.
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 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.