Help guide

Wheel Gesture node

Updated June 21, 2026

Wheel Gesture node

Product media placeholder

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

DOM wheel listener that fires one pulse per noticeable scroll burst with a lockout window — the gesture model used by full-screen scrolljack / slide-deck navigation. Accumulates `deltaY`, fires a single-frame `pulse` once accumulated travel crosses `threshold`, then ignores further wheel events for `lockoutMs` (typically the slide transition duration). Resets the accumulator after `restMs` of idle so a slow scroll doesn't drift toward the threshold.

Type wheelGestureCategory inputsContext sharedDynamic ports noCompound no

Inputs

PortTypeDescription
gateInputfloatWhen > 0.5 the node ignores wheel events regardless of the time-lockout. Wire from any boolean-shaped graph signal — e.g. `slideRouter.transitionProgress` (any non-zero value means in-flight) to debounce visibly even when the lockoutMs window mismatches the actual transition.

Outputs

PortTypeDescription
pulsefloatSingle-frame rising-edge spike when a burst crosses threshold.
directionfloat+1 forward / -1 backward / 0 idle. Sign of the burst that fired the most-recent pulse.
accumDeltafloatCurrent accumulated signed delta on the chosen axis (debug introspection).
burstMagnitudefloat|accumulated| at the moment of the most-recent fire. Authors who want "advance N slides on a violent scroll" wire this through `floor(burstMagnitude / threshold)` to count multi-step bursts.

Parameters

ParameterTypeDefaultDescription
selectorelementSelector""Element to listen on. **Leave empty** for window-scope (the right choice for most full-page wheel navigation). Set a specific selector only to scope to a region.
axisaxisChooser"y"Which delta channel(s) feed the accumulator. Vertical (deltaY) is the default for slide decks; horizontal (deltaX) for galleries; both lets dominant-axis bursts fire either direction.
thresholdfloat60Accumulated |delta| on the chosen axis required to fire a pulse. Default 60. min 1
lockoutMsfloat800Time after a pulse during which further wheel events are ignored. Use the `gateInput` port for transition-aware lockout instead of a fixed-time guess. min 0
restMsfloat250Idle time after which the accumulator resets to zero. Prevents slow continuous scroll from drifting toward threshold. min 0

Use cases

  • Full-screen slide-deck navigation — wire `wheelGesture.pulse` → `slideRouter.advance` directly. One scroll burst = one slide. (Combine with a second `wheelGesture` filtered to negative direction → `slideRouter.retreat` if you want bidirectional gesture-driven nav.)
  • Section-snap pages — same pattern as above with one section per pulse.
  • Direction-aware skip — read `direction` (+1/-1) to choose between forward/backward state machine transitions.

Related nodes

Envelope

Use wheelGesture 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