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.
Inputs
| Port | Type | Description |
|---|---|---|
| - | - | No ports declared. |
Outputs
| Port | Type | Description |
|---|---|---|
activeIdx | float | Currently-active integer section index (in [0, count)). Snaps on each wheel-driven step. |
forwardActive | float | 0/1 latch — `1` when the most recent step was forward (wheel-down). Use to gate forward-only animation values. |
backwardActive | float | 0/1 latch — `1` when the most recent step was backward (wheel-up). Mirror of `forwardActive`. |
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
count | int | 1 | Number 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 |
mountSelector | elementSelector | "" | 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. |
threshold | float | 30 | Minimum 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 |
cooldownMs | int | 1300 | Minimum 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 |
tolerance | float | 50 | Pass-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/