diff --git a/web/base_viewer.js b/web/base_viewer.js index b1b1086da..54ed21e6e 100644 --- a/web/base_viewer.js +++ b/web/base_viewer.js @@ -1250,10 +1250,16 @@ class BaseViewer { const scrollAhead = this._isScrollModeHorizontal ? this.scroll.right : this.scroll.down; + const preRenderExtra = + this._scrollMode === ScrollMode.VERTICAL && + this._spreadMode !== SpreadMode.NONE && + !this.isInPresentationMode; + const pageView = this.renderingQueue.getHighestPriority( visiblePages, this._pages, - scrollAhead + scrollAhead, + preRenderExtra ); if (pageView) { this._ensurePdfPageLoaded(pageView).then(() => { diff --git a/web/pdf_rendering_queue.js b/web/pdf_rendering_queue.js index 1057f3e70..d43d1dd30 100644 --- a/web/pdf_rendering_queue.js +++ b/web/pdf_rendering_queue.js @@ -102,8 +102,9 @@ class PDFRenderingQueue { * @param {Object} visible * @param {Array} views * @param {boolean} scrolledDown + * @param {boolean} [preRenderExtra] */ - getHighestPriority(visible, views, scrolledDown) { + getHighestPriority(visible, views, scrolledDown, preRenderExtra = false) { /** * The state has changed. Figure out which page has the highest priority to * render next (if any). @@ -128,14 +129,20 @@ class PDFRenderingQueue { // All the visible views have rendered; try to render next/previous page. // (IDs start at 1, so no need to add 1 when `scrolledDown === true`.) - const preRenderIndex = scrolledDown - ? visible.last.id - : visible.first.id - 2; - const preRenderView = views[preRenderIndex]; + let preRenderIndex = scrolledDown ? visible.last.id : visible.first.id - 2; + let preRenderView = views[preRenderIndex]; if (preRenderView && !this.isViewFinished(preRenderView)) { return preRenderView; } + if (preRenderExtra) { + preRenderIndex += scrolledDown ? 1 : -1; + preRenderView = views[preRenderIndex]; + + if (preRenderView && !this.isViewFinished(preRenderView)) { + return preRenderView; + } + } // Everything that needs to be rendered has been. return null; }