diff --git a/web/base_viewer.js b/web/base_viewer.js index 21de19214..206ac4482 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 7e96c9d2c..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). @@ -126,20 +127,20 @@ class PDFRenderingQueue { } } - // All the visible views have rendered; try to render next/previous pages. - if (scrolledDown) { - const nextPageIndex = visible.last.id; - // IDs start at 1, so no need to add 1. - if (views[nextPageIndex] && !this.isViewFinished(views[nextPageIndex])) { - return views[nextPageIndex]; - } - } else { - const previousPageIndex = visible.first.id - 2; - if ( - views[previousPageIndex] && - !this.isViewFinished(views[previousPageIndex]) - ) { - return views[previousPageIndex]; + // 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`.) + 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.