Open to full-time roles
Hire me
Lab

Ripple Hover Grid

A field of cells that swells outward from the cursor and settles behind it. The delay on each cell comes from its distance to the pointer, not its position in the list, which is what makes it read as a wave instead of a sweep. Click for a bigger one.

Move across the grid, then click it.

How it works

The parts that matter

Distance, not index

Each cell's delay is its pixel distance from the pointer divided by a speed. Stagger by index gives you a diagonal sweep; stagger by distance gives you a circle spreading out, which is what the eye expects from a ripple.

Positions measured once

Cell centres are cached on load and only remeasured on resize. Calling getBoundingClientRect for 160 cells on every mousemove is the usual reason these demos stutter.

Throttled and bounded

New waves fire at most every 70ms, and cells beyond the radius are skipped entirely. Without both limits the tween count climbs until the fan comes on.

Want motion like this on your site?