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

Function useScrollTopOffset

packages/shared/src/hooks/useScrollTopOffset.ts:10–45  ·  view source on GitHub ↗
(
  getElement: () => HTMLElement | Window | null | undefined,
  {
    onOverOffset,
    onUnderOffset,
    offset = 0,
    scrollProperty = 'scrollTop',
  }: UseScrollTopOffsetProps,
)

Source from the content-addressed store, hash-verified

8}
9
10export const useScrollTopOffset = (
11 getElement: () => HTMLElement | Window | null | undefined,
12 {
13 onOverOffset,
14 onUnderOffset,
15 offset = 0,
16 scrollProperty = 'scrollTop',
17 }: UseScrollTopOffsetProps,
18): void => {
19 useEffect(() => {
20 const element = getElement();
21
22 if (!element) {
23 return undefined;
24 }
25
26 const onScroll = () => {
27 let scrollValue = document.documentElement.scrollTop;
28
29 if (scrollProperty === 'scrollY') {
30 scrollValue = 'scrollY' in element ? element.scrollY : window.scrollY;
31 } else if ('scrollTop' in element) {
32 scrollValue = element.scrollTop;
33 }
34
35 const command = scrollValue > offset ? onOverOffset : onUnderOffset;
36 command();
37 };
38
39 element.addEventListener('scroll', onScroll);
40
41 return () => {
42 element.removeEventListener('scroll', onScroll);
43 };
44 }, [onOverOffset, onUnderOffset, offset, scrollProperty, getElement]);
45};

Callers 3

useScrollTopClassNameFunction · 0.90
PostPageFunction · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected