computer-scienceangular-roadmapbackend-roadmapblockchain-roadmapdba-roadmapdeveloper-roadmapdevops-roadmapfrontend-roadmapgo-roadmaphactoberfestjava-roadmapjavascript-roadmapnodejs-roadmappython-roadmapqa-roadmapreact-roadmaproadmapstudy-planvue-roadmapweb3-roadmap
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
29 lines
722 B
29 lines
722 B
import { type RefObject, useEffect, useState } from 'react'; |
|
import { isMobileScreen } from '../lib/is-mobile.ts'; |
|
|
|
// Checks if the sticky element is stuck or not |
|
export function useStickyStuck<T extends HTMLElement>( |
|
ref: RefObject<T>, |
|
offset: number = 0, |
|
): boolean { |
|
const [isSticky, setIsSticky] = useState(false); |
|
|
|
useEffect(() => { |
|
if (isMobileScreen()) { |
|
return; |
|
} |
|
|
|
const handleScroll = () => { |
|
if (ref.current) { |
|
setIsSticky(ref.current.getBoundingClientRect().top <= offset); |
|
} |
|
}; |
|
|
|
window.addEventListener('scroll', handleScroll); |
|
return () => { |
|
window.removeEventListener('scroll', handleScroll); |
|
}; |
|
}, [ref, offset]); |
|
|
|
return isSticky; |
|
}
|
|
|