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.
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.