Merge pull request #17724 from calixteman/issue17707
Avoid to have to wait to zoom after scrolling
This commit is contained in:
commit
e42b114e80
47
web/app.js
47
web/app.js
@ -165,6 +165,9 @@ const PDFViewerApplication = {
|
|||||||
_isCtrlKeyDown: false,
|
_isCtrlKeyDown: false,
|
||||||
_nimbusDataPromise: null,
|
_nimbusDataPromise: null,
|
||||||
_caretBrowsing: null,
|
_caretBrowsing: null,
|
||||||
|
_isScrolling: false,
|
||||||
|
_lastScrollTop: 0,
|
||||||
|
_lastScrollLeft: 0,
|
||||||
|
|
||||||
// Called once when the document is loaded.
|
// Called once when the document is loaded.
|
||||||
async initialize(appConfig) {
|
async initialize(appConfig) {
|
||||||
@ -683,6 +686,47 @@ const PDFViewerApplication = {
|
|||||||
} else {
|
} else {
|
||||||
throw new Error("Not implemented: run");
|
throw new Error("Not implemented: run");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
(typeof PDFJSDev === "undefined" || !PDFJSDev.test("MOZCENTRAL")) &&
|
||||||
|
!("onscrollend" in document.documentElement)
|
||||||
|
) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const { mainContainer } = appConfig;
|
||||||
|
// Using the values lastScrollTop and lastScrollLeft is a workaround to
|
||||||
|
// https://bugzilla.mozilla.org/show_bug.cgi?id=1881974.
|
||||||
|
// TODO: remove them once the bug is fixed.
|
||||||
|
({ scrollTop: this._lastScrollTop, scrollLeft: this._lastScrollLeft } =
|
||||||
|
mainContainer);
|
||||||
|
const scroll = () => {
|
||||||
|
if (
|
||||||
|
this._lastScrollTop === mainContainer.scrollTop &&
|
||||||
|
this._lastScrollLeft === mainContainer.scrollLeft
|
||||||
|
) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
mainContainer.removeEventListener("scroll", scroll, {
|
||||||
|
passive: true,
|
||||||
|
});
|
||||||
|
this._isScrolling = true;
|
||||||
|
const scrollend = () => {
|
||||||
|
({ scrollTop: this._lastScrollTop, scrollLeft: this._lastScrollLeft } =
|
||||||
|
mainContainer);
|
||||||
|
this._isScrolling = false;
|
||||||
|
mainContainer.addEventListener("scroll", scroll, {
|
||||||
|
passive: true,
|
||||||
|
});
|
||||||
|
mainContainer.removeEventListener("scrollend", scrollend);
|
||||||
|
mainContainer.removeEventListener("blur", scrollend);
|
||||||
|
};
|
||||||
|
mainContainer.addEventListener("scrollend", scrollend);
|
||||||
|
mainContainer.addEventListener("blur", scrollend);
|
||||||
|
};
|
||||||
|
mainContainer.addEventListener("scroll", scroll, {
|
||||||
|
passive: true,
|
||||||
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
get externalServices() {
|
get externalServices() {
|
||||||
@ -2653,6 +2697,7 @@ function webViewerWheel(evt) {
|
|||||||
evt.preventDefault();
|
evt.preventDefault();
|
||||||
// NOTE: this check must be placed *after* preventDefault.
|
// NOTE: this check must be placed *after* preventDefault.
|
||||||
if (
|
if (
|
||||||
|
PDFViewerApplication._isScrolling ||
|
||||||
zoomDisabledTimeout ||
|
zoomDisabledTimeout ||
|
||||||
document.visibilityState === "hidden" ||
|
document.visibilityState === "hidden" ||
|
||||||
PDFViewerApplication.overlayManager.active
|
PDFViewerApplication.overlayManager.active
|
||||||
@ -2718,8 +2763,6 @@ function webViewerWheel(evt) {
|
|||||||
// left corner is restored. When the mouse wheel is used, the position
|
// left corner is restored. When the mouse wheel is used, the position
|
||||||
// under the cursor should be restored instead.
|
// under the cursor should be restored instead.
|
||||||
PDFViewerApplication._centerAtPos(previousScale, evt.clientX, evt.clientY);
|
PDFViewerApplication._centerAtPos(previousScale, evt.clientX, evt.clientY);
|
||||||
} else {
|
|
||||||
setZoomDisabledTimeout();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user