From 20a1b9a889d96ccb91e1f91c9d78220d9b9e5e08 Mon Sep 17 00:00:00 2001 From: marwin Date: Sun, 5 Apr 2026 18:44:49 +0200 Subject: [PATCH] Fix scroll position lost after PDF zoom re-render Scroll position was restored before browser finished layout, so scrollHeight was still wrong. Now waits two animation frames after reRenderPdf completes before restoring position. Also shows loading overlay during zoom re-renders, not just on initial load. Co-Authored-By: Claude Sonnet 4.6 --- static/js/app.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/static/js/app.js b/static/js/app.js index 83c238e..868dd26 100644 --- a/static/js/app.js +++ b/static/js/app.js @@ -3712,6 +3712,9 @@ async function applyPdfZoom(newZoom) { pdfSmartZoomPage(pdfCurrentPage); } else { await reRenderPdf(); + // Wait for two animation frames so the browser finishes layout + // before reading scrollHeight for position restoration + await new Promise(r => requestAnimationFrame(() => requestAnimationFrame(r))); if (contentEl2 && fraction > 0) { contentEl2.scrollTop = fraction * (contentEl2.scrollHeight - contentEl2.clientHeight); } @@ -3722,7 +3725,13 @@ async function reRenderPdf() { if (!currentPdfBuffer) return; const contentEl = $('reader-content'); if (!contentEl) return; + const overlay = $('reader-overlay'); + const loadingEl = document.createElement('div'); + loadingEl.className = 'pdf-loading-overlay'; + loadingEl.innerHTML = ''; + if (overlay) overlay.appendChild(loadingEl); await renderPdf(currentPdfBuffer, contentEl); + loadingEl.remove(); if (readerSettings.pdfPaginated) enterPdfPaginatedMode(); }