From 6189ee87d834d62664111e4ae93e459e6f520cf6 Mon Sep 17 00:00:00 2001 From: LuminousRuoxi <2494735589@qq.com> Date: Thu, 10 Sep 2026 16:34:37 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=BF=BB=E8=AF=91=E5=AE=8C=E6=88=90?= =?UTF-8?q?=E5=90=8E=E3=80=8C=E6=9F=A5=E7=9C=8B=E4=B9=8B=E5=89=8D=E7=9A=84?= =?UTF-8?q?=E5=86=99=E4=BD=9C=E5=BB=BA=E8=AE=AE=E3=80=8D=E6=84=8F=E5=A4=96?= =?UTF-8?q?=E6=94=B6=E8=B5=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 根因: 翻译完成 → renderOriginalPane 重建左栏 DOM,
被重新创建, open 状态丢失(用户实测) - 记录折叠区展开状态 priorGuidanceOpen,重建后按状态恢复;toggle 事件同步更新 - 顺带: 重建前记录/恢复内容区滚动位置,操作后内容不再跳回顶部 - 验证: 翻译完成 / 收起译文(缓存切换)/ 切段往返 均保持展开与缓存状态(5/5),无 JS 报错 --- index.html | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/index.html b/index.html index 3dcd95a..4851280 100644 --- a/index.html +++ b/index.html @@ -272,6 +272,9 @@ let origTranslations = []; let origTranslateOpen = []; let analysisVersion = 1; let helpState = {}; +// 「查看之前的写作建议」(
) 展开状态:翻译/切换等会重建左栏 DOM, +// 不记住的话翻译完成后会意外收起(用户实测)。 +let priorGuidanceOpen = false; let dirtyDuringRecheck = false; let transitioning = false; // 对话历史(快照)持久化:刷新后回对话页不丢理解/诊断/复检卡片(用户实测发现 + PM 同意修复)。 @@ -936,6 +939,9 @@ function bindAnnotationInteractions(wrap){ wrap.querySelectorAll('.annotation-card').forEach(el=>el.onclick=e=>{ if(!e.target.closest('.why-toggle')) activate(el.dataset.noteId); }); // 原文中文对照(逐句):对照行与批注同色同序号 —— 点击对照行可联动高亮原文句 wrap.querySelectorAll('[data-role="orig-translate"]').forEach(btn=>{ btn.onclick = toggleOrigTranslate; }); + // 记住「查看之前的写作建议」的展开状态(左栏重建后恢复,避免翻译完成被收起) + const prior = wrap.querySelector('.prior-guidance'); + if(prior) prior.addEventListener('toggle', ()=>{ priorGuidanceOpen = prior.open; }); wrap.querySelectorAll('.ot-line[data-note-id]').forEach(el=>{ el.onclick = () => activate(el.dataset.noteId); }); wrap.querySelectorAll('.why-toggle').forEach(btn=>btn.onclick=e=>{ e.stopPropagation(); @@ -990,7 +996,7 @@ function renderFocusOriginal(wrap){
这段在讲什么
${escapeHtml(meaningOf(current))}
`; const body = isRevisionTarget(current) - ? `${visibleMeaning}
查看之前的写作建议${fullDirection}${paper}
` + ? `${visibleMeaning}
查看之前的写作建议${fullDirection}${paper}
` : fullDirection + paper; wrap.className = 'original-workspace'; wrap.innerHTML = `${banner}${body}
和上下文怎么接
${escapeHtml(contextHintOf(current))}
`; @@ -1038,9 +1044,14 @@ function updateParagraphSwitcherState(){ } function renderOriginalPane(){ const wrap=$('#originalFull'); + // 重建 DOM 前记住滚动位置:「查看之前的写作建议」展开后点翻译/切视图等 + // 都会走到这里,不恢复会导致内容跳回顶部 + const body = wrap.closest('.pane-body'); + const scrollTop = body ? body.scrollTop : 0; wrap.innerHTML=''; if(originalView==='focus') renderFocusOriginal(wrap); else renderFullOriginal(wrap); renderParagraphSwitcher(); + if(body) body.scrollTop = scrollTop; } function updateProgress(){ const n = rewrittenCount();