UNPKG

@mantine/hooks

Version:

A collection of 50+ hooks for state and UI management

1 lines 2.16 kB
{"version":3,"file":"use-scroll-direction.mjs","names":[],"sources":["../../src/use-scroll-direction/use-scroll-direction.ts"],"sourcesContent":["import { useEffect, useEffectEvent, useRef, useState } from 'react';\n\nexport type ScrollDirection = 'up' | 'down' | 'unknown';\n\nexport function useScrollDirection(): ScrollDirection {\n const lastScrollTopRef = useRef(0);\n const [scrollDirection, setScrollDirection] = useState<ScrollDirection>('unknown');\n const isResizingRef = useRef(false);\n const resizeTimerRef = useRef<number | undefined>(undefined);\n\n const handleScroll = useEffectEvent(() => {\n if (isResizingRef.current) {\n return;\n }\n\n const currentScrollTop = window.scrollY || document.documentElement.scrollTop;\n setScrollDirection(currentScrollTop < lastScrollTopRef.current ? 'up' : 'down');\n lastScrollTopRef.current = currentScrollTop;\n });\n\n useEffect(() => {\n const handleResize = () => {\n isResizingRef.current = true;\n window.clearTimeout(resizeTimerRef.current);\n resizeTimerRef.current = window.setTimeout(() => {\n isResizingRef.current = false;\n }, 300);\n };\n\n window.addEventListener('scroll', handleScroll);\n window.addEventListener('resize', handleResize);\n\n return () => {\n window.removeEventListener('scroll', handleScroll);\n window.removeEventListener('resize', handleResize);\n clearTimeout(resizeTimerRef.current);\n };\n }, []);\n\n return scrollDirection;\n}\n"],"mappings":";;;AAIA,SAAgB,qBAAsC;CACpD,MAAM,mBAAmB,OAAO,CAAC;CACjC,MAAM,CAAC,iBAAiB,sBAAsB,SAA0B,SAAS;CACjF,MAAM,gBAAgB,OAAO,KAAK;CAClC,MAAM,iBAAiB,OAA2B,KAAA,CAAS;CAE3D,MAAM,eAAe,qBAAqB;EACxC,IAAI,cAAc,SAChB;EAGF,MAAM,mBAAmB,OAAO,WAAW,SAAS,gBAAgB;EACpE,mBAAmB,mBAAmB,iBAAiB,UAAU,OAAO,MAAM;EAC9E,iBAAiB,UAAU;CAC7B,CAAC;CAED,gBAAgB;EACd,MAAM,qBAAqB;GACzB,cAAc,UAAU;GACxB,OAAO,aAAa,eAAe,OAAO;GAC1C,eAAe,UAAU,OAAO,iBAAiB;IAC/C,cAAc,UAAU;GAC1B,GAAG,GAAG;EACR;EAEA,OAAO,iBAAiB,UAAU,YAAY;EAC9C,OAAO,iBAAiB,UAAU,YAAY;EAE9C,aAAa;GACX,OAAO,oBAAoB,UAAU,YAAY;GACjD,OAAO,oBAAoB,UAAU,YAAY;GACjD,aAAa,eAAe,OAAO;EACrC;CACF,GAAG,CAAC,CAAC;CAEL,OAAO;AACT"}