21 lines
496 B
TypeScript
21 lines
496 B
TypeScript
|
import { RefObject, useEffect, useMemo, useState } from "react";
|
||
|
|
||
|
export default function useOnScreen(ref: RefObject<HTMLElement>) {
|
||
|
const [isIntersecting, setIntersecting] = useState(false);
|
||
|
|
||
|
const observer = useMemo(
|
||
|
() =>
|
||
|
new IntersectionObserver(([entry]) =>
|
||
|
setIntersecting(entry.isIntersecting)
|
||
|
),
|
||
|
[ref]
|
||
|
);
|
||
|
|
||
|
useEffect(() => {
|
||
|
observer.observe(ref.current as HTMLElement);
|
||
|
return () => observer.disconnect();
|
||
|
}, []);
|
||
|
|
||
|
return isIntersecting;
|
||
|
}
|