@@ -2227,19 +2227,18 @@ const PDFViewerApplication = {
2227
2227
mainContainer ) ;
2228
2228
}
2229
2229
2230
+ let scrollendTimeoutID , scrollAbortController ;
2230
2231
const scrollend = ( ) => {
2231
2232
if ( typeof PDFJSDev === "undefined" || ! PDFJSDev . test ( "MOZCENTRAL" ) ) {
2232
2233
( { scrollTop : this . _lastScrollTop , scrollLeft : this . _lastScrollLeft } =
2233
2234
mainContainer ) ;
2234
2235
}
2235
-
2236
- this . _isScrolling = false ;
2237
- mainContainer . addEventListener ( "scroll" , scroll , {
2238
- passive : true ,
2239
- signal,
2240
- } ) ;
2241
- mainContainer . removeEventListener ( "scrollend" , scrollend ) ;
2242
- mainContainer . removeEventListener ( "blur" , scrollend ) ;
2236
+ clearTimeout ( scrollendTimeoutID ) ;
2237
+ if ( this . _isScrolling ) {
2238
+ scrollAbortController . abort ( ) ;
2239
+ scrollAbortController = null ;
2240
+ this . _isScrolling = false ;
2241
+ }
2243
2242
} ;
2244
2243
const scroll = ( ) => {
2245
2244
if ( this . _isCtrlKeyDown ) {
@@ -2253,10 +2252,27 @@ const PDFViewerApplication = {
2253
2252
return ;
2254
2253
}
2255
2254
2256
- mainContainer . removeEventListener ( "scroll" , scroll ) ;
2257
- this . _isScrolling = true ;
2258
- mainContainer . addEventListener ( "scrollend" , scrollend , { signal } ) ;
2259
- mainContainer . addEventListener ( "blur" , scrollend , { signal } ) ;
2255
+ if ( ! this . _isScrolling ) {
2256
+ scrollAbortController = new AbortController ( ) ;
2257
+ const abortSignal = AbortSignal . any ( [
2258
+ scrollAbortController . signal ,
2259
+ signal ,
2260
+ ] ) ;
2261
+
2262
+ mainContainer . addEventListener ( "scrollend" , scrollend , {
2263
+ signal : abortSignal ,
2264
+ } ) ;
2265
+ mainContainer . addEventListener ( "blur" , scrollend , {
2266
+ signal : abortSignal ,
2267
+ } ) ;
2268
+ this . _isScrolling = true ;
2269
+ }
2270
+ clearTimeout ( scrollendTimeoutID ) ;
2271
+ // Why 100 ? Because of:
2272
+ // https://developer.chrome.com/blog/scrollend-a-new-javascript-event
2273
+ // Maybe we could find a better value... ideally the `scrollend` event
2274
+ // should be correctly fired.
2275
+ scrollendTimeoutID = setTimeout ( scrollend , 100 ) ;
2260
2276
} ;
2261
2277
mainContainer . addEventListener ( "scroll" , scroll , {
2262
2278
passive : true ,
0 commit comments