Roadmap to becoming a developer in 2022
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

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;
}