← All effects

Progress Orb

LoaderVanilla JS · zero dependenciesclip to a circle, draw a sine on top
-- fps
prefers-reduced-motion detected — orb shown at a fixed fill, no waves

X-ray · layers

the rising fill
the surface is alive (off = flat)
the number in the glass

Parameters

Orb size110 px
Fill time3200 ms
Wave height6 px
Wave speed1.0×
your version · updates as you tinker

How this effect works

The orb is a clipping trick: we clip() the canvas to a circle, and from then on anything we draw only exists inside the glass. The liquid is just a rectangle whose top edge sits at bottom − progress × height — clipped by the circle, it reads as fluid filling a sphere.

The ripples layer replaces the rectangle's flat top with two travelling sine waves (a taller slow one and a smaller faster one on top — one wave looks mechanical, two look wet). The waves keep moving even while progress pauses, which is what makes the orb feel like it holds a real liquid rather than a chart. The percentage sits in the glass, flipping from dark to light as the liquid passes behind it.

Production notes: respects prefers-reduced-motion (fixed fill, flat surface) · one clip + two sine strokes per frame · in production, drive progress from real loading state · the copied snippet is self-contained HTML + JS.