PR pixi-reels
All recipes

Lead-in delay. how long before the fall starts

Four interactive canvases. Same spin, same destruction, same .tumble() feel. only the pause between SPIN click and the first frame of fall-out animation changes. From snappy 0 ms to dramatic 700 ms.

The lead-in is the gap between the player clicking SPIN and the reels visibly starting to fall. It’s not a library feature. just an await new Promise((r) => setTimeout(r, ms)) before reelSet.spin() in your handler. But it dramatically changes the slot’s perceived pace, and pairing the right lead-in with your spin SFX is the difference between a satisfying click and a button that “doesn’t feel like it did anything.”

Every canvas below runs the same scripted spin + destruction. Only the LEAD_IN_MS constant at the top of each recipe changes.

0 ms. instant

Loading recipe…

const LEAD_IN_MS = 0;

onSpin: async () => {
  if (LEAD_IN_MS > 0) await new Promise((r) => setTimeout(r, LEAD_IN_MS));
  reelSet.setDropOrder('ltr');
  const spinDone = reelSet.spin();
  // ...
}

The fall starts the same frame the click handler runs. Snappiest possible feel; perfect for high-velocity play where the player taps-spins many rounds per minute. Pair with a sound that triggers WITH the fall, not before. a lead-in sound followed by an instant visual reads as mistimed.

150 ms. subtle

Loading recipe…

const LEAD_IN_MS = 150;

Just enough room for a short “tap” SFX to play before the reels move. The pause is below the threshold where players think “why isn’t anything happening?”. still feels responsive, but you’ve earned a beat for sound design.

350 ms. anticipation

Loading recipe…

const LEAD_IN_MS = 350;

A clearly perceived deliberate pause. Room for a full “spin-up” SFX, a button-press animation, or a “READY” tone. Common in mid-tier slots where the spin is the main event, not a transactional micro-action.

700 ms. suspense

Loading recipe…

const LEAD_IN_MS = 700;

Dramatic. The reels stand still while music swells, a “GO!” stinger fires, or a feature-pick UI flashes. Use sparingly. fine for bonus / free-spin / jackpot reveals, exhausting on every base-game spin. Players will skip this if you don’t give them an UNSKIPPABLE reason to wait.

Picking the lead-in

Lead-inUse forAvoid for
0 ms (instant)Turbo modes, fast-paced reskinsSlots that lean on sound design
150 ms (subtle)Default base game on most modern slotsBonus rounds that need narrative beats
350 ms (anticipation)Mid-tier base game, story-driven themesTurbo or high-volume play modes
700 ms (suspense)Feature reveals, free-spin triggers, jackpot introBase-game spins (player fatigue)

A common pattern: scale the lead-in by speed mode. In 'normal' speed use 200-350 ms; in 'turbo' drop to 50-100 ms; in 'superTurbo' go to 0. Same handler, different LEAD_IN_MS selected from reelSet.speed.activeName.

Cascade refills don’t get a lead-in

Worth flagging: the lead-in only applies to the player’s spin() click. Cascade refills (Moment B. reelSet.refill(...)) chain off the previous win-destruction and shouldn’t pause again. If you add await wait(LEAD_IN_MS) in the cascade loop too, you stack pauses on every cascade level and the round drags. The lead-in is exclusively before the first spin() of a round.