@docubook/create
Version:
CLI to create DocuBook projects
32 lines (23 loc) • 881 B
text/typescript
"use client"
import { useState, useCallback, useEffect } from "react"
export function useScrollPosition(threshold = 0.5) {
const [isScrolled, setIsScrolled] = useState(false)
const handleScroll = useCallback(() => {
if (typeof window === "undefined") return
const scrollPosition = window.scrollY
const viewportHeight = window.innerHeight
const shouldBeSticky = scrollPosition > viewportHeight * threshold
setIsScrolled((prev) => (shouldBeSticky !== prev ? shouldBeSticky : prev))
}, [threshold])
// Add scroll event listener
useEffect(() => {
// Initial check
// eslint-disable-next-line react-hooks/set-state-in-effect
handleScroll()
window.addEventListener("scroll", handleScroll, { passive: true })
return () => {
window.removeEventListener("scroll", handleScroll)
}
}, [handleScroll])
return isScrolled
}