Bouncing Circular Text
Bouncing Circular Text is a text component that arranges your message in a circle and keeps it in constant motion: the ring spins on itself while traveling around the container, and when it reaches the edges, the letters compress against the wall and spring back. Text, colors, sizes, speed, and bounce behavior can all be adjusted to fit your design.
It also respects your visitors’ accessibility preferences: when “reduce motion” is enabled on their device, the animation stays still automatically.
Note that it’s purely decorative: the text is rendered with JavaScript and isn’t part of the DOM, so it won’t be readable by search engines or screen readers.
This H1 Is Doing Its Best
It heard it needed to be "bold and punchy." It's trying so hard.
Scroll Down. We Dare You
The twist is a footer.
New Hero Section Solves Everything
The rest of the site remains a broken, neglected wasteland.
Client Wants It Pop
They have provided no further direction, but they will know it when they see it.
Instructions
Open the JS script in the Supa Code Block element and edit the options at the end of the script. Each option is explained below:
Content & styling
text– The string that gets laid out in a circle. Every character (including spaces) becomes its own span, spaced evenly around the ring at360 / text.lengthdegrees apart. Repeating a phrase like"BUY NOW • "with a trailing space keeps the loop seamless.fontSize– Font size in pixels for each character.color– Text color (CSS color value).fontFamily– CSS font-family stack used for the characters.fontWeight– CSS font weight (e.g. 400, 700).background– Optional background applied to the container element itself. If empty/omitted, the container's own existing background stays untouched.
Geometry
radius– Radius of the circle in pixels; the distance from the ring's center point to each character.
Spin
speed– Rotation speed in degrees per second.direction– Sign of the rotation: positive spins clockwise, negative (e.g.-1) spins counter-clockwise. It's a multiplier, so2would double the effective speed.
Movement / animation
animation– Which motion the whole ring does."bounce"= vertical bouncing,"slide"= horizontal movement back and forth between the walls,"both"= bounce + slide together,"none"= fully static (positioned viaposX/posY). Any other value just centers the ring statically.height– Bounce height in pixels: how far above its lowest point the ring rises on each bounce (clamped to whatever clearance actually fits in the container).vSpeed– Vertical bounce rate in cycles per second.1= one full up-and-down bounce per second; higher values bounce faster.hSpeed– Horizontal sliding speed in pixels per second (used only for"slide"/"both").posX– Horizontal position of the ring's center as a percentage (0–100) of the container width. Only used whenanimationis"none".posY– Same thing vertically, as a percentage of container height. Only used whenanimationis"none".
Edge behavior (the "squish")
squishDepth– How many pixels the ring's center is allowed to push past the container walls. Because each character's bounding box is clamped inside the container, this makes the letters bunch up/compress against the edge instead of cleanly stopping — that's the squish effect.0= the ring stops flush at the walls with no distortion.wallInset– A restraint on the squish. It's subtracted fromsquishDepth(effective press =squishDepth − wallInset), so raising it pulls the ring further from the walls. If it's ≥squishDepth, the squish is disabled entirely.
Accessibility
respectReducedMotion– Iftrue, the scroller checks the user's system "prefers-reduced-motion" setting and won't animate at all in that case (it stays statically centered). Set tofalseif you want the animation to run regardless of that OS-level preference.
Two notes about your specific call:
- Since you set
animation: "bounce", the optionshSpeed,posX, andposYare currently doing nothing (they only matter for"slide"/"both"and"none"respectively). squishDepth: 70withwallInset: 0lets the ring press up to 70px past the walls, so during a bounce you'll see fairly heavy bunching of letters at the top and bottom edges — reduce it if that looks too aggressive.