@@ -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