MCPcopy Create free account
hub / github.com/dailydotdev/apps / useScrollFade

Function useScrollFade

packages/shared/src/hooks/useScrollFade.ts:46–84  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

44};
45
46export const useScrollFade = <El extends HTMLElement = HTMLDivElement>() => {
47 const cleanupRef = useRef<(() => void) | undefined>(undefined);
48 const frameRef = useRef<number | undefined>(undefined);
49
50 const setElementRef = useCallback((element: El | null) => {
51 cleanupRef.current?.();
52 cleanupRef.current = undefined;
53
54 if (!element) {
55 return;
56 }
57
58 const scheduleUpdate = () => {
59 if (frameRef.current !== undefined) {
60 cancelAnimationFrame(frameRef.current);
61 }
62 frameRef.current = requestAnimationFrame(() => updateScrollFade(element));
63 };
64
65 const resizeObserver = new ResizeObserver(scheduleUpdate);
66 resizeObserver.observe(element);
67 element.addEventListener('scroll', scheduleUpdate, { passive: true });
68
69 updateScrollFade(element);
70
71 cleanupRef.current = () => {
72 element.removeEventListener('scroll', scheduleUpdate);
73 resizeObserver.disconnect();
74 if (frameRef.current !== undefined) {
75 cancelAnimationFrame(frameRef.current);
76 frameRef.current = undefined;
77 }
78 };
79 }, []);
80
81 useEffect(() => () => cleanupRef.current?.(), []);
82
83 return setElementRef;
84};

Callers 2

QuestButtonFunction · 0.90
DropdownMenu.tsxFile · 0.90

Calls 1

updateScrollFadeFunction · 0.85

Tested by

no test coverage detected