
Nastro che accelera con lo scorrimento
Scroll, Testo, Hover
Gratis
Tre righe come i cursori di un mixer: una banda colorata si allunga e dentro la stessa scritta è scura, così la parola cambia colore proprio sul bordo. Le dosi salgono su una molla e si regolano col mouse, col dito e coi tasti.
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 dose sliders</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/mona-sans@5.3.0/standard.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<main class="pagina">
<p class="nota" data-nota>Move the mouse over a row: the dose follows the pointer, and the word changes colour right on the edge. You can drag it too, or use the arrow keys.</p>
<header class="testa">
<p class="testa__etichetta">The recipe</p>
<h1 class="testa__titolo">Three doses, by eye.</h1>
</header>
<!-- ogni riga è un cursore: una banda colorata che si allunga, con dentro la stessa scritta in scuro -->
<div class="dosi" data-dosi>
<div class="dose" data-dose="olio" data-riposo="0.62" role="slider" tabindex="0" aria-label="Oil" aria-valuemin="0" aria-valuemax="100" style="--banda: #D7B24A">
<span class="dose__nome" aria-hidden="true">Oil</span>
<div class="dose__banda" data-banda aria-hidden="true"><span class="dose__nome dose__nome--dentro">Oil</span></div>
<span class="dose__quanto" data-quanto aria-hidden="true"></span>
<i class="dose__scala" aria-hidden="true"></i>
</div>
<div class="dose" data-dose="sale" data-riposo="0.38" role="slider" tabindex="0" aria-label="Salt" aria-valuemin="0" aria-valuemax="100" style="--banda: #B9C7CF">
<span class="dose__nome" aria-hidden="true">Salt</span>
<div class="dose__banda" data-banda aria-hidden="true"><span class="dose__nome dose__nome--dentro">Salt</span></div>
<span class="dose__quanto" data-quanto aria-hidden="true"></span>
<i class="dose__scala" aria-hidden="true"></i>
</div>
<div class="dose" data-dose="peperoncino" data-riposo="0.55" role="slider" tabindex="0" aria-label="Chilli" aria-valuemin="0" aria-valuemax="100" style="--banda: #D8452B">
<span class="dose__nome" aria-hidden="true">Chilli</span>
<div class="dose__banda" data-banda aria-hidden="true"><span class="dose__nome dose__nome--dentro">Chilli</span></div>
<span class="dose__quanto" data-quanto aria-hidden="true"></span>
<i class="dose__scala" aria-hidden="true"></i>
</div>
</div>
<p class="piede">Grandma’s doses don’t fit on a sheet of paper: you set them by eye, tasting as you go.</p>
</main>
<script src="https://cdn.jsdelivr.net/npm/gsap@3.15.0/dist/gsap.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/gsap@3.15.0/dist/ScrollTrigger.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.
43 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 «I cursori delle dosi» da Animorio e adattala al mio sitoIn ogni riga la parola c’è due volte, nello stesso punto: una chiara sul fondo, una scura dentro la banda. La banda è tagliata da clip-path: inset(0 calc((1 − livello) × 100%) 0 0), con il livello in una variabile CSS: dove finisce la banda finisce anche la parola scura, e il bordo taglia le lettere a metà.
Il livello è una piccola simulazione: accelerazione = rigidezza × (meta − livello) − smorzamento × velocità, integrata in passi di 1/240 di secondo. All’entrata la molla è morbida (90 e 9) e rimbalza; quando segue il puntatore è rigida (260 e 30) e arriva senza oscillare.
Il passaggio del mouse si ascolta sulla finestra e cerca la riga con closest(); col dito si trascina con setPointerCapture, e touch-action: pan-y lascia scorrere la pagina in verticale. Ogni riga è un role="slider" con aria-valuenow e aria-valuetext: le frecce la spostano di 5, Home e Fine la portano agli estremi.
Il livello si divide in sei fasce, ognuna con la sua parola, diversa per olio, sale e peperoncino. La parola sta attaccata al bordo della banda; oltre l’80% passa dentro, scura, perché fuori non ci sta.
| Nome | File | Di partenza | Cosa cambia |
|---|---|---|---|
MOLLA, SEGUE | script.js | 90/9, 260/30 | Rigidezza e smorzamento della molla all’entrata e quando segue il puntatore. |
PAROLE | script.js | 6 per riga | Le dosi a parole di ogni riga, dalla più piccola alla più grande. |
data-riposo | index.html | 0.62, 0.38, 0.55 | Dove si ferma ogni dose all’entrata. |
--banda | index.html | per riga | Il colore della banda di ogni riga. |
Per un elenco di servizi, di ingredienti o di competenze da far sembrare un pannello di controllo: tre o quattro righe, parole corte, e qualcosa da regolare.
Le righe sono più basse e le parole più piccole; la dose si trascina di lato col dito o si fissa con un tocco, mentre in verticale la pagina scorre come sempre.
Niente molla: le dosi sono già al loro posto e si spostano subito, senza rimbalzi.
GSAP 3.15.0, Mona Sans (font variabile) 5.3.0.
Compressi con gzip, i tre file della demo pesano 4,3 KB; le librerie: GSAP + ScrollTrigger 45 KB.
Provata il 21 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.