vaweGitHub

MovesReveal a title

Grid stagger wave

look: field1.6 sgrid-stagger-wave.md

Grid stagger wave: final frame of the text reveal animation
Tap the clip to play it.

When to use

Use when a title should arrive with "many things" around it (integrations, features, customers): the title tile is there from frame 0, and a grid of tiles enters around it in a wave by distance from the title's centre, 70 ms per tile of distance. The detail that sells it is that the wave pushes: each tile starts pulled 30 percent of a tile toward the source and at 0.55 scale, and the front shoves it out to its cell with a pop. A delay by row or column reads as a typewriter; a delay by Euclidean distance reads as one ring spreading. Clip: grid-stagger-wave.mp4. Demo: demo/grid-stagger-wave.html.

The code

js
import { EASE } from '../../core/motion/presets.js';
const src = { c: 2.5, r: 1.5 }, STEP = 70, T0 = 140;   // source in tile units (the title's centre); ms per tile of distance
tiles.forEach((tile) => {                               // tile.c, tile.r: its column and row
  const dx = tile.c - src.c, dy = tile.r - src.r, d = Math.hypot(dx, dy);
  tile.el.animate([{ translate: `${(-dx / d) * 30}% ${(-dy / d) * 30}%`, scale: 0.55 }, { translate: '0 0', scale: 1 }],
    { duration: 520, delay: T0 + d * STEP, easing: EASE.pop, fill: 'both' });
  tile.el.animate([{ opacity: 0 }, { opacity: 1 }], { duration: 120, delay: T0 + d * STEP, easing: 'linear', fill: 'both' });
});
title.animate([{ scale: 0.9 }, { scale: 1 }], { duration: 420, easing: EASE.land, fill: 'both' });
grid.animate([{ scale: 1 }, { scale: 1.025 }], { duration: 1600, easing: EASE.glide, fill: 'both' });   // keeps the full grid alive

Easing and timing

The clip runs 1.6 s. The look is field.

The clip uses 3 named eases from core/motion/presets.js. Each is a pair of After Effects handles: influence is how far along the segment the handle reaches, and speed is how fast the value moves at the key, as a multiple of the segment's average speed. Motion in the docs explains both.

EaseLeaving a keyArriving at a key
glide33% influence, speed 033% influence, speed 0.1
land12% influence, speed 4.875% influence, speed 0
pop12% influence, speed 4.835% influence, speed -1.5

Notes

70 ms per tile keeps the neighbours of one tile 30 to 80 ms apart (the stagger band) and puts the farthest corner, about 5.7 tiles out, at 0.54 s. Under 40 ms the wave lands as one block; over 100 ms the far corner arrives after the viewer has read the title. The opacity runs 120 ms, far shorter than the move, so the tile is seen travelling. Put the source on the thing the viewer should read, off-centre; a wave from the frame centre points at nothing.

Looks (ground, type, radius, accent) live in demo/demo.css; this snippet keeps neutral tokens.

Sound

Sound: droplet at 0.14 s into the move, when the first tiles leave the title (default gain); no tick per tile.