diff --git a/web/app.js b/web/app.js index e9d40b0e249142..3ccd62838b6f38 100644 --- a/web/app.js +++ b/web/app.js @@ -165,6 +165,7 @@ const PDFViewerApplication = { _isCtrlKeyDown: false, _nimbusDataPromise: null, _caretBrowsing: null, + _isScrolling: false, // Called once when the document is loaded. async initialize(appConfig) { @@ -683,6 +684,33 @@ const PDFViewerApplication = { } else { throw new Error("Not implemented: run"); } + + if ( + (typeof PDFJSDev === "undefined" || !PDFJSDev.test("MOZCENTRAL")) && + !("onscrollend" in document.documentElement) + ) { + return; + } + + const { mainContainer } = appConfig; + const scroll = () => { + this._isScrolling = true; + const scrollend = () => { + this._isScrolling = false; + mainContainer.addEventListener("scroll", scroll, { + once: true, + passive: true, + }); + mainContainer.removeEventListener("scrollend", scrollend); + mainContainer.removeEventListener("blur", scrollend); + }; + mainContainer.addEventListener("scrollend", scrollend); + mainContainer.addEventListener("blur", scrollend); + }; + mainContainer.addEventListener("scroll", scroll, { + once: true, + passive: true, + }); }, get externalServices() { @@ -2653,6 +2681,7 @@ function webViewerWheel(evt) { evt.preventDefault(); // NOTE: this check must be placed *after* preventDefault. if ( + PDFViewerApplication._isScrolling || zoomDisabledTimeout || document.visibilityState === "hidden" || PDFViewerApplication.overlayManager.active @@ -2718,8 +2747,6 @@ function webViewerWheel(evt) { // left corner is restored. When the mouse wheel is used, the position // under the cursor should be restored instead. PDFViewerApplication._centerAtPos(previousScale, evt.clientX, evt.clientY); - } else { - setZoomDisabledTimeout(); } }