@@ -95,6 +95,8 @@ const StickyScrollBar: React.ForwardRefRenderFunction<unknown, StickyScrollBarPr
95
95
} ;
96
96
97
97
const checkScrollBarVisible = ( ) => {
98
+ raf . cancel ( rafRef . current ) ;
99
+
98
100
rafRef . current = raf ( ( ) => {
99
101
if ( ! scrollBodyRef . current ) {
100
102
return ;
@@ -147,12 +149,27 @@ const StickyScrollBar: React.ForwardRefRenderFunction<unknown, StickyScrollBarPr
147
149
} ;
148
150
} , [ scrollBarWidth , isActive ] ) ;
149
151
152
+ // Loop for scroll event check
150
153
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 ) ) ;
152
164
window . addEventListener ( RESIZE_EVENT , checkScrollBarVisible , false ) ;
165
+ window . addEventListener ( SCROLL_EVENT , checkScrollBarVisible , false ) ;
166
+ container . addEventListener ( SCROLL_EVENT , checkScrollBarVisible , false ) ;
167
+
153
168
return ( ) => {
154
- container . removeEventListener ( SCROLL_EVENT , checkScrollBarVisible ) ;
169
+ scrollParents . forEach ( p => p . removeEventListener ( SCROLL_EVENT , checkScrollBarVisible ) ) ;
155
170
window . removeEventListener ( RESIZE_EVENT , checkScrollBarVisible ) ;
171
+ window . removeEventListener ( SCROLL_EVENT , checkScrollBarVisible ) ;
172
+ container . removeEventListener ( SCROLL_EVENT , checkScrollBarVisible ) ;
156
173
} ;
157
174
} , [ container ] ) ;
158
175
0 commit comments