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

move closer

Blur and lift resolve as the cursor closes the distance.

Hover

rotate(  0deg) scale(1.00)

Pointer position drives rotation and scale through a single transform.

Hover

top left

06

Origin-Aware Popover

Same animation, nine origins — growth should start at the anchor.

Click
07

Ripple Button

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

Click

renders at the viewport edge

08

Toast Choreography

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.

09

Draw the Path

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

Hover
10

Setting Path Length

pathLength normalizes any path to 100 — draw loops without measuring.

Click
11

Swoop Template

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

Hover
12

Masked Line

A dash animation revealed through an SVG mask.

Hover
13

Dotted Line Draw

A dotted path draws itself by masking a solid twin underneath.

Auto
14

Bell Mute Toggle

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

Click
15

Light Along a Path

A pulse of light travels the wire between two nodes.

Click
16

Animating Light

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

Auto
17

Animate Along a Path

SMIL sends a dash of light around a tangled scribble.

Click
18

Open / Close Along a Path

A menu icon whose dashes travel their paths between states.

Click
19

Inbox Arrow Morph

A chained SMIL sequence — the arrow drops, morphs, and resets.

Click
20

Polygon Morph

Point interpolation morphs a triangle flat and back again.

Click
21

Play / Pause Morph

Path interpolation via the Motion library — play melts into pause.

Click
22

CD Insert

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

Click
23

Path Circuit

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

24

Animated Circuit

Three dashes race a circuit board, growing and shrinking as they go.

Auto
25

Arc Playground

The SVG arc command dissected, one A segment at a time.

26

viewBox Camera

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

Click
27

Non-Scaling Stroke

vector-effect keeps line weight constant while the artwork scales.

28

Squishy SVG

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

29

Paint Order

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

30

Radial Progress

A range input drives a circular progress ring through dashoffset.

Drag
31

Sparkline

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

Hover

0:30

32

Animated Timer

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

Click
33

Fey Radar Chart

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.

34

rAF From Scratch

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

Click
35

Bounce

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

Auto
36

Dynamic Keyframes

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

Click
37

Blinky Face

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

Auto
38

Shimmer

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

Hover
39

Rocket Ship

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

Auto
40

Disperse From Center

The first burst — particles scatter from the heart with random offsets.

Click
41

Dispersion: CSS Variables

JS does the math once and hands the offsets to CSS as custom properties.

Click
42

Dispersion: Polar Coordinates

Angle and distance instead of x/y — even spread around the circle.

Click
43

Dispersion: Less Randomness

Evenly spaced angles with a touch of jitter — order, with a little chaos.

Click
44

Dispersion: Interpolation

Twenty-five particles interpolated around the full circle.

Click
45

Dispersion: Partial Keyframes

Keyframes without a from block inherit each particle's starting state.

Click
46

Magic Wand

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

Click
47

Color Shifting

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

Click
48

Heart Particles

The minimal cut of the heart-burst pattern.

Click
49

Popping Circle

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

Click
50

Masked Heart

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

Click
51

Falling Emojis

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

Auto
52

Reduced Motion

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

Click
53

Like Button, in React

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.