Robert Crocker

Craft obsessed developer who designs.

← Back to home

Lab

53 specimens · all live

Animation and interaction studies built while figuring out how interfaces should feel — from cursor math to SVG drawing to particle systems. Nothing here is a screenshot. Go ahead and touch it.

I

Interaction Studies

0108

Cursor distance, transform origins, and the small feedback loops that make interfaces feel attentive. Built natively for this site.

trace the hypotenuse

Pythagoras, live — the right triangle behind every cursor distance.

Hover
inputoutput100082

clampedNormalize(62) → 5.7

clampedNormalize — one range in, another out, never past the rails.

Hover

Hundreds of SVG dots scaled by proximity, painted outside the React render path.

Hover

rotate(  0deg) scale(1.00)

Pointer position drives rotation and scale through a single transform.

Hover

Two staggered keyframes spawn a wave at the exact click point.

Click

renders at the viewport edge

Stacked, timed, dismissed — notification motion that stays out of the way.

Click
II

Drawing with SVG

0933

Strokes that draw themselves, paths as motion rails, masks, morphs, and the odd corners of the SVG spec. Exercises straight out of the sandbox.

stroke-dasharray plus dashoffset — the classic self-drawing line.

Hover

A reusable underline swoop, drawn on hover through an SVG <use>.

Hover

The strike-through draws across the bell — and unmasks itself on the way out.

Click

A repeating gradient slides along the strokes like current through wires.

Auto

Point interpolation morphs a triangle flat and back again.

Click

offset-path slides the disc into the player along a curve.

Click

Shapes traced with raw M, L, and Z commands — the path syntax, learned by hand.

Pan the camera, not the shapes — animating the viewBox with rAF.

Click

min-width lets the artwork squish gracefully instead of shrinking away.

paint-order: stroke fill — outlined type without the crusty overlap.

A chart that draws itself on hover, scaled with normalize().

Hover

0:30

The ring drains and the hand sweeps — SMIL triggered straight from the play button.

Click

The polygon morphs on a spline while the labels count along the same curve.

Click
III

Particles & Play

3453

Keyframes from scratch, then particle systems — one dispersion study at a time, from first burst to magic wand.

A hand-rolled animate() — easing functions over requestAnimationFrame.

Click

Three balls, one keyframe — distance and duration set by custom properties.

Auto

Oscillation tuned per ball with CSS variables; the button freezes them mid-flight.

Click

Eyes blink by animating the ellipse ry attribute straight from CSS.

Auto

A sheen sweeps the buy button on hover — and on focus, for keyboards.

Hover

Exhaust particles spawn on an interval beneath a gently hovering rocket.

Auto

Click anywhere — sparkles burst from the cursor with sin/cos offsets.

Click

Particles hue-rotate as they fade — one filter, the whole rainbow.

Click

A pop ring grown with an SVG mask — r is animatable from CSS.

Click

Each like slides a rect beneath the mask — exponential easing tops it off.

Click

Confetti rain — emoji spawned, animated, and cleaned up on a timer.

Auto

The same burst, gated by prefers-reduced-motion in both CSS and JS.

Click

Where the dispersion series lands — pop, hue-shift, and twinkle, with React owning the particle list.

Click

Several of these grew into long-form write-ups — read the essays in Craft.