Help guide

Bidirectional Snap node

Updated June 21, 2026

Bidirectional Snap node

Product media placeholder

Replace this area with a screenshot or short walkthrough video during the media sweep.

Self-contained wheel-driven discrete-step navigator. Bundles observer + threshold pulses + counter + direction latch + initial-load pulse + indexed dispatcher into one author-facing node. Outputs an integer `activeIdx` that wraps in [0, count), forward / backward latches for direction-aware reveals, and per-section enter / exit pulse pairs (`enter_out{i}`, `exit_out{i}`) fired on every `activeIdx` edge. Compound — expands at load to ~8 primitives.

Type bidirectionalSnapCategory inputsContext sharedDynamic ports yesCompound yes

Inputs

PortTypeDescription
--No ports declared.

Outputs

PortTypeDescription
activeIdxfloatCurrently-active integer section index (in [0, count)). Snaps on each wheel-driven step.
forwardActivefloat0/1 latch — `1` when the most recent step was forward (wheel-down). Use to gate forward-only animation values.
backwardActivefloat0/1 latch — `1` when the most recent step was backward (wheel-up). Mirror of `forwardActive`.

Parameters

ParameterTypeDefaultDescription
countint1Number of sections / slots in the snap sequence. Auto-derived from a sibling forEach instance's match count when wired with `indexed: true` — manual setting only needed for non-forEach hand-wired graphs. min 1; max 256
mountSelectorelementSelector""CSS selector for the element the observer attaches its wheel listener to. Empty = window-level (most common for fullscreen snap demos). Set to a scrollable container for embedded carousels.
thresholdfloat30Minimum signed delta-Y per evaluate to count as a step. Lower = more sensitive (small trackpad nudges fire); higher = more deliberate. Default 30 matches typical wheel-event magnitudes. min 1; step 1
cooldownMsint1300Minimum milliseconds between consecutive step pulses. Prevents one continuous wheel gesture from firing multiple steps. Default 1300 is roughly the section transition duration — tune to match your enter tween length. min 0; step 100
tolerancefloat50Pass-through to the internal observer node. Filters tiny scroll noise that shouldn't register as motion at all. Default 50. min 0; step 1

Use cases

  • Section-snap fullscreen scroll — wheel up / wheel down advances or retreats one section at a time; the indexedDispatch fires paired enter / exit pulses so the leaving section's exit tween and the entering section's enter tween both run from the same edge.
  • Vertical or horizontal carousel — same compound, just point each per-slide gate at the carousel's slide elements.
  • Scroll-spy nav, tab strip stepper — anywhere a wheel / keyboard / button click moves a single integer cursor and N parallel pipelines all need their per-slot pulses.

Envelope

Use bidirectionalSnap as the node type inside a graph node envelope. Add id, optional params, optional connections, and optional activeWhen based on the guide context.

Generated source

Registry faster-motion-docs/node-registry.jsonCategory page /help/faster-motion/faster-motion-node-category-inputs/

Was this guide helpful?

Sunny Arora

Written by

Sunny Arora

Get technical deep dives delivered to your inbox

Join creators and developers who get exclusive insights, tutorials, and behind-the-scenes content every week.

No spam. Unsubscribe anytime.

Continue Exploring

You might also enjoy