
Marquee that speeds up with scroll
Scroll, Text, Hover
Free
A button that says no twice before copying the address, and every time the sentence decodes letter by letter out of block glyphs.
A folder that runs on its own: index.html, style.css, script.js and the libraries from a CDN. The React and Vue tabs hold the same demo as a ready component, which switches its animations off when it leaves the page.
<!doctype html>
<html lang="it">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Il bottone che non vuole</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fontsource-variable/archivo@5.3.0/standard.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<main class="pagina">
<header class="testa">
<p class="marchio">Scarti</p>
<p class="testa__riga">Mostra di foto venute male</p>
</header>
<section class="invito" aria-labelledby="titolo">
<h1 class="invito__titolo" id="titolo">Hai una foto venuta male?</h1>
<p class="invito__testo">Mandacela: la appendiamo in sala, accanto alle altre. Se è venuta proprio male, anche meglio.</p>
<!-- il bottone dice di no due volte; al terzo clic cede e copia l'indirizzo -->
<button class="bottone" type="button" data-bottone data-autoclic><span class="bottone__testo" data-testo>Non scriverci</span></button>
<p class="esito" data-esito aria-live="polite"></p>
</section>
<footer class="piede">
<a href="#" data-mescola>Orari e indirizzo</a>
<a href="#" data-mescola>Instagram</a>
<a href="#" data-mescola>Per la stampa</a>
</footer>
</main>
<script src="script.js"></script>
</body>
</html>Change values, colours and text with the controls and watch the animation respond live. Or write in the code yourself. Then download the folder with your changes.
25 values to change
With the Animorio connector, Claude Code takes it from here, guide included, and fits it into your project. Paste this request:
Take “The reluctant button” from Animorio and fit it into my siteThe button counts clicks: each one moves to the next sentence, and only the third calls navigator.clipboard.writeText, falling back to an invisible textarea and execCommand('copy'). Clicks that do not come from a person, with e.isTrusted false, never touch the clipboard. The last sentence stays 2.4 seconds; halfway through, the button forgets after 4.
Every character gets a random start up to 0.2 seconds and an end 0.1 to 0.34 seconds later, plus 12 ms for each position: the ends drift to the right and the sentence reads from the left. Before its start a character shows the old letter, between start and end a block glyph, after that the new letter. The glyph changes only with a 0.3 probability on each frame.
Spaces are never scrambled: the sentence keeps its shape even while everything inside it moves. The button measures itself once with all four sentences and takes the width of the longest, so the sentences change and it does not. The block glyphs come from another typeface and are wider than the letters: they are measured once, and each sits in a span squeezed with a scaleX to the average width of a letter, with a negative margin giving back the space removed.
Every refusal has its own reaction, with the Web Animations API: at the first the button shrinks to 0.93 and back, at the second it shakes sideways by −9, 8, −6 and 3 px, at the third it swells to 1.07. When the pointer passes, the sentence decodes again into itself, and the footer links do the same.
| Name | File | Default | What it changes |
|---|---|---|---|
FRASI | script.js | 4 | The button’s four sentences, from the first no to giving in. |
INDIRIZZO | script.js | 'scarti@example.com' | The address that reaches the clipboard at the third click: a placeholder. |
RESTA, PAZIENZA | script.js | 2.4, 4 | After how many seconds the button forgets, at the end and halfway. |
GLIFI | script.js | '▚▞▖▗▘▝░▒▓█' | The block glyphs that spin during the decode. |
ATTESA, GIRO | script.js | 0.2, [0.1, 0.34] | The longest delay before a character spins, and how long it spins. |
CAMBIA | script.js | 0.3 | The probability that a glyph changes on each frame. |
For a contact, a sign-up or any button that can afford a bit of irony. The decode on its own suits the links and labels of a site with a technical character.
The same: tap three times. There is no reshuffle on hover, because on a phone there is no pointer passing by.
No glyphs and no reactions: the sentences simply change, and the address is still copied at the third click.
Archivo (font variabile) 5.3.0.
Compressed with gzip, the three demo files weigh 5.2 KB, and no libraries are needed.
Tested on 28 September 2026
Use it in your own projects and in your clients’ projects. Do not resell it or redistribute it as is. GSAP stays under its own Standard license. Full license.
With your account’s email and password.
or with your email
You’re signed in as .
With your account, you can download the zip of every animation and every pack, for free.