
Il rullo delle ore
Selettori, 3D, Fisica
NuovaGratis
Il pulsante Menu è un cannocchiale d'ottone chiuso, col corpo in cuoio: premuto, i tubi escono uno dall'altro, ognuno con uno scatto contro il fermo e un rimbalzo, e su ognuno è inciso una voce del menu. Il tubo sotto il puntatore ruota appena sul suo asse e il riflesso gira sull'ottone, con la zigrinatura del collare che scorre. Chiudendo, i tubi rientrano dall'ultimo al primo. Sul computer si allunga di lato, sul telefono pende in giù.
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 telescope menu</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/fraunces@5.3.0/index.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<main class="stage">
<!-- the telescope menu: a closed brass telescope is the Menu button. Pressed, its draw tubes slide out one from
the other, each with a click and a bounce, and each carries a section of the site; the tube under the pointer
turns a little and the light runs round the brass. Closing, the tubes go back in from the last to the first -->
<nav class="scope" aria-label="Main" data-scope>
<div class="scope__rig" data-rig>
<ul class="scope__tubes" id="scope-menu" data-menu>
<li class="tube" data-tube><a class="tube__link" href="#shop" data-link><span class="tube__shell" data-shell></span><span class="tube__collar" data-collar></span><span class="tube__label" data-label>Shop</span></a></li>
<li class="tube" data-tube><a class="tube__link" href="#collections" data-link><span class="tube__shell" data-shell></span><span class="tube__collar" data-collar></span><span class="tube__label" data-label>Collections</span></a></li>
<li class="tube" data-tube><a class="tube__link" href="#journal" data-link><span class="tube__shell" data-shell></span><span class="tube__collar" data-collar></span><span class="tube__label" data-label>Journal</span></a></li>
<li class="tube" data-tube><a class="tube__link" href="#about" data-link><span class="tube__shell" data-shell></span><span class="tube__collar" data-collar></span><span class="tube__label" data-label>About</span></a></li>
<li class="tube" data-tube><a class="tube__link" href="#account" data-link><span class="tube__shell" data-shell></span><span class="tube__collar" data-collar></span><span class="tube__eye" data-eye></span><span class="tube__label" data-label>Account</span></a></li>
</ul>
<button class="body" type="button" aria-expanded="false" aria-controls="scope-menu" data-body data-autoclic>
<span class="body__cap" data-cap aria-hidden="true"></span>
<span class="body__leather" data-leather aria-hidden="true"></span>
<span class="body__collar" data-bcollar aria-hidden="true"></span>
<span class="body__words" aria-hidden="true"><span class="body__word" data-word="open">Menu</span><span class="body__word body__word--close" data-word="close">Close</span></span>
<span class="sr" data-name>Open the menu</span>
</button>
</div>
</nav>
</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.
21 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 cannocchiale» da Animorio e adattala al mio sitoIl corpo e cinque tubi con diametri decrescenti (52, 46, 41, 37, 33 pixel) e la stessa lunghezza. La posizione di ogni tubo è un numero s, da meno la sua corsa (tutto dentro) a 0 (fuori contro il fermo), misurato dalla bocca del tubo prima: così un tubo porta con sé tutti quelli che ha dentro. Ognuno resta per 10 pixel sotto il collare di quello prima, e quelli più larghi stanno sopra, così i tubi dentro sono nascosti dal metallo.
Aprendo, ogni tubo è tirato fuori con una forza PULL e frenato un poco dall'aria; quando arriva al fermo rimbalza indietro con BOUNCE della sua velocità e la forza lo riporta contro il fermo finché si posa. Il vincolo: un tubo comincia a muoversi solo quando quello da cui esce ha toccato il suo fermo; chiudendo è il contrario, dall'ultimo al primo, con una spinta più debole (PUSH). La fisica gira a mano sul ticker di GSAP in passi da 1/240 di secondo, col passo del fotogramma limitato a 1/30.
L'ombreggiatura di ogni tubo è un linear-gradient di traverso, ricalcolato quando il tubo gira: per 28 punti sul diametro lo script trova l'angolo della superficie (l'arcoseno) e somma una luce diffusa, un riflesso stretto in alto, un filo di luce in basso e una banda scura, tutti fermi rispetto allo studio, più i segni del tornio, che appartengono al metallo e quindi girano con l'angolo phi. I collari usano 72 punti con i denti della zigrinatura, che scorrono quando il tubo ruota.
Ogni tubo ha un angolo phi su una molla (SPIN) verso TURN radianti quando il puntatore è sopra e verso 0 quando esce: la molla oscilla un poco, e il riflesso si sposta del 22 per cento della rotazione mentre i segni del tornio si spostano del tutto. La scritta incisa si sposta di traverso del seno dell'angolo e si stringe del coseno, come se girasse sulla superficie. A ogni scatto contro il fermo il tubo riceve una piccola spinta di rotazione, e tutto il cannocchiale un colpo lungo l'asse.
La lunghezza attuale del cannocchiale si calcola dalle posizioni, e il gruppo scivola di metà della differenza perché resti centrato mentre si allunga. Sotto VERTICAL_BELOW pixel di larghezza il cannocchiale pende in giù: le misure diventano verticali, il gradiente gira di 90 gradi e le voci stanno accanto ai tubi. Il pulsante ha aria-expanded, Esc chiude e torna al pulsante, le frecce passano da una voce all'altra e il menu chiuso è inert.
| Nome | File | Di partenza | Cosa cambia |
|---|---|---|---|
PULL | script.js | 9000 | Quanto forte è tirato fuori ogni tubo, in pixel al secondo al quadrato: di più, un'apertura più rapida. |
BOUNCE | script.js | 0.32 | Quanta velocità tiene un tubo rimbalzando sul fermo. |
PUSH | script.js | 0.75 | La chiusura, fatta a mano: quanto forte, rispetto all'apertura. |
TURN | script.js | 0.35 | Di quanto ruota un tubo sotto il puntatore, in radianti. |
SPIN | script.js | [70, 0.3] | La molla di quella rotazione: rigidità e smorzamento (1 = senza oscillare). |
VERTICAL_BELOW | script.js | 820 | Sotto questa larghezza della pagina il cannocchiale pende in giù invece di stare di traverso. |
Per il menu di un negozio o di un sito con un carattere artigianale, d'antiquariato o di viaggio: strumenti, mappe, orologi, caffè, una rivista di esplorazioni. Cinque o sei voci al massimo: ogni voce è un tubo.
Sotto gli 820 pixel il cannocchiale pende in giù dal pulsante e le voci, in oro sul nero, stanno accanto a ogni tubo: tutto sta in 240 pixel di larghezza e meno di 440 di altezza. Il tocco su un tubo lo fa ruotare come il mouse sopra, e tutta la riga della voce è da toccare.
Niente tubi che scorrono e niente rotazioni: aprendo, il cannocchiale compare già allungato in dissolvenza, con le voci; chiudendo svanisce e torna corto. La scritta MENU e CLOSE cambia senza movimento.
GSAP 3.15.0, Fraunces (font variabile) 5.3.0.
Compressi con gzip, i tre file della demo pesano 8,7 KB; le librerie: GSAP 28 KB.
Provata il 5 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.