diff --git a/src/FixedHolder/index.tsx b/src/FixedHolder/index.tsx index f2a4a6331..3db03db28 100644 --- a/src/FixedHolder/index.tsx +++ b/src/FixedHolder/index.tsx @@ -82,6 +82,8 @@ const FixedHolder = React.forwardRef>((pro }, []); React.useEffect(() => { + const abortController = new AbortController(); + function onWheel(e: WheelEvent) { const { currentTarget, deltaX } = e as unknown as React.WheelEvent; if (deltaX) { @@ -104,10 +106,13 @@ const FixedHolder = React.forwardRef>((pro e.preventDefault(); } } - scrollRef.current?.addEventListener('wheel', onWheel, { passive: false }); + scrollRef.current?.addEventListener('wheel', onWheel, { + passive: false, + signal: abortController.signal, + }); return () => { - scrollRef.current?.removeEventListener('wheel', onWheel); + abortController.abort(); }; }, []); diff --git a/src/stickyScrollBar.tsx b/src/stickyScrollBar.tsx index 284b25085..5001f791d 100644 --- a/src/stickyScrollBar.tsx +++ b/src/stickyScrollBar.tsx @@ -141,18 +141,25 @@ const StickyScrollBar: React.ForwardRefRenderFunction { - document.body.addEventListener(MOUSEUP_EVENT, onMouseUp, false); - document.body.addEventListener(MOUSEMOVE_EVENT, onMouseMove, false); + const abortController = new AbortController(); + document.body.addEventListener(MOUSEUP_EVENT, onMouseUp, { + capture: false, + signal: abortController.signal, + }); + document.body.addEventListener(MOUSEMOVE_EVENT, onMouseMove, { + capture: false, + signal: abortController.signal, + }); checkScrollBarVisible(); return () => { - document.body.removeEventListener(MOUSEUP_EVENT, onMouseUp); - document.body.removeEventListener(MOUSEMOVE_EVENT, onMouseMove); + abortController.abort(); }; }, [scrollBarWidth, isActive]); // Loop for scroll event check React.useEffect(() => { if (!scrollBodyRef.current) return; + const abortController = new AbortController(); const scrollParents: (HTMLElement | SVGElement)[] = []; let parent = getDOM(scrollBodyRef.current); @@ -161,16 +168,27 @@ const StickyScrollBar: React.ForwardRefRenderFunction p.addEventListener(SCROLL_EVENT, checkScrollBarVisible, false)); - window.addEventListener(RESIZE_EVENT, checkScrollBarVisible, false); - window.addEventListener(SCROLL_EVENT, checkScrollBarVisible, false); - container.addEventListener(SCROLL_EVENT, checkScrollBarVisible, false); + scrollParents.forEach(p => + p.addEventListener(SCROLL_EVENT, checkScrollBarVisible, { + capture: false, + signal: abortController.signal, + }), + ); + window.addEventListener(RESIZE_EVENT, checkScrollBarVisible, { + capture: false, + signal: abortController.signal, + }); + window.addEventListener(SCROLL_EVENT, checkScrollBarVisible, { + capture: false, + signal: abortController.signal, + }); + container.addEventListener(SCROLL_EVENT, checkScrollBarVisible, { + capture: false, + signal: abortController.signal, + }); return () => { - scrollParents.forEach(p => p.removeEventListener(SCROLL_EVENT, checkScrollBarVisible)); - window.removeEventListener(RESIZE_EVENT, checkScrollBarVisible); - window.removeEventListener(SCROLL_EVENT, checkScrollBarVisible); - container.removeEventListener(SCROLL_EVENT, checkScrollBarVisible); + abortController.abort(); }; }, [container]);