k8ordo
  • UI
  • Form
  • State
  • Router
  • Static
  • Server
Switch to dark mode
  • Get Started
  • Theming
  • i18n
  • Components
  • Hooks
  • Helpers
  • AI
Open navigation
DOM Interaction
  • useClickAway
  • useHover
  • useResize
  • useScrollDirection
  • useScrollLock
  • useWindowResize
  • useWritingMode
State & Storage
  • useClipboard
  • useControllableState
Timing
  • useDebouncedTransition
  • useDeferredDebounce
  • useInterval
  • useTimeout
Utility
  • useBreakpoint
  • useClient
  • useDisclosure
  • useStep
  • useWindowSize
Observer
  • useIntersectionObserver
  • useInView
k8ordo

React libraries that use Baseline features without holding back.

Packages
  • @k8ordo/ui
  • @k8ordo/form
  • @k8ordo/state
  • @k8ordo/router
  • @k8ordo/static
  • @k8ordo/server
UI
  • Get Started
  • Theming
  • i18n
  • Components
  • Hooks
  • Helpers
  • AI Chat
  • Generative UI
  • AI Agents
  • Storybook
Resources
  • GitHub
  • npm

© 2026 k8o — MIT License

Typeset in Noto Sans JP & M PLUS 2

Hooks

DOM Interaction
  • useClickAway
  • useHover
  • useResize
  • useScrollDirection
  • useScrollLock
  • useWindowResize
  • useWritingMode
State & Storage
  • useClipboard
  • useControllableState
Timing
  • useDebouncedTransition
  • useDeferredDebounce
  • useInterval
  • useTimeout
Utility
  • useBreakpoint
  • useClient
  • useDisclosure
  • useStep
  • useWindowSize
Observer
  • useIntersectionObserver
  • useInView

useScrollDirection

A hook that detects the current scroll direction.

Import

Usage

Basic Usage

This page's body does not scroll, so the behavior can't be tried here. Please verify on an actual scrollable page.

Vertical: upHorizontal: right

Target element

Vertical: up
Scroll this area to see its scroll direction being detected.

Parameters

options.threshold
Type: number
Default: 50
options.target
Type: RefObject<HTMLElement | null>
Default: window
PropTypeDefault
options.thresholdnumber50
options.targetRefObject<HTMLElement | null>window

Return Value

x
Type: 'left'|'right'
Default: -
y
Type: 'up'|'down'
Default: -
PropTypeDefault
x'left'|'right'-
y'up'|'down'-
import { useScrollDirection } from '@k8ordo/ui';
const { x, y } = useScrollDirection();

return (
  <div>
    <span>Vertical: {y}</span>
    <span>Horizontal: {x}</span>
  </div>
);
const scrollRef = useRef<HTMLDivElement>(null);
const { y } = useScrollDirection({ target: scrollRef, threshold: 20 });

return (
  <div ref={scrollRef} style={{ overflow: 'auto', height: 128 }}>
    {/* scrollable content */}
  </div>
);