useScroll

A React Hook that track the scroll state of target element.

Demo

Source
{
  "isScrolling": false,
  "position": {
    "x": 0,
    "y": 0
  },
  "directions": {
    "left": false,
    "right": false,
    "top": false,
    "bottom": false
  },
  "arrivedState": {
    "left": true,
    "right": false,
    "top": true,
    "bottom": false
  }
}

Usage

See API for more details.

Source

Click links below to view source on GitHub.

API

const scroll = useScroll(elementTarget, options)

ElementTarget

ElementTarget is a union type that represents various kinds of elements that can be targeted.

See ElementTarget or ElementTarget Types for more details.

Options

export interface UseScrollOptions {
  /**
   * The throttle time (ms) to update the scroll position
   */
  throttle?: number
  /**
   * The idle time (ms) to determine the scroll is stopped
   */
  idle?: number
  /**
   * The offset to determine the scroll has arrived at the edge
   */
  offset?: UseScrollOptionsOffset
  /**
   * The scroll event handler
   */
  onScroll?: (event: Event) => void
  /**
   * The scroll stop event handler
   */
  onStop?: (event: Event) => void
  /**
   * The event listener options
   */
  eventListenerOptions?: boolean | AddEventListenerOptions
  /**
   * The scroll behavior
   */
  behavior?: ScrollBehavior
  /**
   * Whether to trigger the first load immediately
   */
  immediate?: boolean
}

Returns

Retuerns contain Pausable instance that can be paused, resumed.

See Pausable for more details.

export interface UseScrollReturns extends Pausable {
  /**
   * scroll x position
   */
  x: number
  /**
   * scroll y position
   */
  y: number
  /**
   * The scroll position
   */
  position: { x: number; y: number }
  /**
   * The scroll directions
   */
  directions: Directions
  /**
   * Whether the scroll is scrolling
   */
  isScrolling: boolean
  /**
   * The arrived state
   */
  arrivedState: ArrivedState
  /**
   * Scroll to the specified position
   */
  scrollTo: (x: number, y: number) => void
  /**
   * Scroll to the end of the specified direction
   */
  scrollToEnd: (direction: 'x' | 'y') => void
  /**
   * Measure the scroll position
   */
  measure(): void
}