diff --git a/index.html b/index.html
index 4851280..b84da7f 100644
--- a/index.html
+++ b/index.html
@@ -1042,12 +1042,14 @@ function updateParagraphSwitcherState(){
btn.classList.toggle('has-copy', hasRewrite(i));
});
}
-function renderOriginalPane(){
+// keepScroll=true 时保留当前滚动位置(翻译/对照展开这类内容更新);
+// 默认回到顶部 —— 切段/首次渲染/切视图若沿用旧位置,会停在上次滚到的
+// 位置(浏览器刷新后也会自动恢复内层滚动容器的位置,表现为"一打开就在
+// 最下面",用户实测)。
+function renderOriginalPane(keepScroll){
const wrap=$('#originalFull');
- // 重建 DOM 前记住滚动位置:「查看之前的写作建议」展开后点翻译/切视图等
- // 都会走到这里,不恢复会导致内容跳回顶部
const body = wrap.closest('.pane-body');
- const scrollTop = body ? body.scrollTop : 0;
+ const scrollTop = keepScroll && body ? body.scrollTop : 0;
wrap.innerHTML='';
if(originalView==='focus') renderFocusOriginal(wrap); else renderFullOriginal(wrap);
renderParagraphSwitcher();
@@ -1216,7 +1218,7 @@ async function toggleOrigTranslate(){
const fresh = rec && rec.text === text;
if(fresh){
origTranslateOpen[i] = !origTranslateOpen[i];
- persistNow(); renderOriginalPane();
+ persistNow(); renderOriginalPane(true);
return;
}
const sentences = splitSentences(text);
@@ -1233,7 +1235,7 @@ async function toggleOrigTranslate(){
if(btn){ btn.disabled = false; btn.textContent = '翻译失败,点击重试'; }
return;
}
- renderOriginalPane();
+ renderOriginalPane(true);
}
function resetHelpPanels(){
const key = pidOf(current);
@@ -1262,6 +1264,12 @@ function renderWorkbench(){
resetHelpPanels();
updateProgress();
renderRecheckHistory();
+ // 首次渲染后再固定一次顶部:浏览器刷新会恢复内层滚动容器位置,
+ // 其恢复时机可能晚于本次渲染(用户实测「一打开就在最下面」)。
+ if(!renderWorkbench._pinnedTop){
+ renderWorkbench._pinnedTop = true;
+ setTimeout(()=>{ const b = $('#originalFull') && $('#originalFull').closest('.pane-body'); if(b) b.scrollTop = 0; }, 150);
+ }
}
async function submitConstraint(){
const input = $('#constraintInput');