Skip to content

Commit 56619be

Browse files
authored
fix: sticky event loop by Copilot AI (#1231)
* fix: sticky event loop * chore: back of container
1 parent 9e4bc80 commit 56619be

File tree

1 file changed

+19
-2
lines changed

1 file changed

+19
-2
lines changed

src/stickyScrollBar.tsx

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,8 @@ const StickyScrollBar: React.ForwardRefRenderFunction<unknown, StickyScrollBarPr
9595
};
9696

9797
const checkScrollBarVisible = () => {
98+
raf.cancel(rafRef.current);
99+
98100
rafRef.current = raf(() => {
99101
if (!scrollBodyRef.current) {
100102
return;
@@ -147,12 +149,27 @@ const StickyScrollBar: React.ForwardRefRenderFunction<unknown, StickyScrollBarPr
147149
};
148150
}, [scrollBarWidth, isActive]);
149151

152+
// Loop for scroll event check
150153
React.useEffect(() => {
151-
container.addEventListener(SCROLL_EVENT, checkScrollBarVisible, false);
154+
if (!scrollBodyRef.current) return;
155+
156+
const scrollParents: HTMLElement[] = [];
157+
let parent: HTMLElement = scrollBodyRef.current;
158+
while (parent) {
159+
scrollParents.push(parent);
160+
parent = parent.parentElement;
161+
}
162+
163+
scrollParents.forEach(p => p.addEventListener(SCROLL_EVENT, checkScrollBarVisible, false));
152164
window.addEventListener(RESIZE_EVENT, checkScrollBarVisible, false);
165+
window.addEventListener(SCROLL_EVENT, checkScrollBarVisible, false);
166+
container.addEventListener(SCROLL_EVENT, checkScrollBarVisible, false);
167+
153168
return () => {
154-
container.removeEventListener(SCROLL_EVENT, checkScrollBarVisible);
169+
scrollParents.forEach(p => p.removeEventListener(SCROLL_EVENT, checkScrollBarVisible));
155170
window.removeEventListener(RESIZE_EVENT, checkScrollBarVisible);
171+
window.removeEventListener(SCROLL_EVENT, checkScrollBarVisible);
172+
container.removeEventListener(SCROLL_EVENT, checkScrollBarVisible);
156173
};
157174
}, [container]);
158175

0 commit comments

Comments
 (0)