From 0caef9cac01a4e41040aa97d770db75eb7152044 Mon Sep 17 00:00:00 2001 From: mole404 <248403041+mole404@users.noreply.github.com> Date: Sat, 3 Oct 2026 15:28:51 +0800 Subject: [PATCH] =?UTF-8?q?fix(viewer):=20=E7=94=A8=20CSS=20=E6=8A=8A?= =?UTF-8?q?=E5=88=87=E5=9B=BE=E8=BF=87=E6=B8=A1=E7=9A=84=E8=B5=B7=E7=82=B9?= =?UTF-8?q?=E9=92=89=E5=9C=A8=E5=B1=8F=E5=B9=95=E4=B8=AD=E5=BF=83=EF=BC=88?= =?UTF-8?q?=E4=BF=9D=E7=95=99=E5=8A=A8=E7=94=BB=EF=BC=8C=E5=8E=BB=E6=8E=89?= =?UTF-8?q?=E9=80=A0=E6=88=90=E5=BF=BD=E6=9C=89=E5=BF=BD=E6=97=A0=E7=9A=84?= =?UTF-8?q?=E5=85=B3=E8=BF=87=E6=B8=A1=E8=A1=A5=E4=B8=81=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 老师反馈两点:① 反向切换(图都已加载完)时仍有时带过渡、有时不带;② 想要保留过渡 动画,"直接闪出来"效果差。复核后定位到两条: · 上一版的 1 秒兜底定时器:慢图(>1s 才加载完)会在库读 options.transition 之前先被 恢复,于是过渡又生效 —— 这是"有时有动画"的来源之一。 · 上一版还有一把锁:只有上一次已恢复(saved === null)时才去关过渡。若 1 秒内连续切 (或 viewed 未到),这一次就不关 ⇒ 又带过渡。两条叠加就表现为"忽有忽无"。 既然老师要动画,方向改为"保留库自带的过渡,把起点钉死": 库每切一张新建 ,刚插入时用默认 CSS(满宽、贴顶);加载完成后才写内联样式:先写成 "屏幕中心的一个点",再写最终尺寸,靠 CSS 过渡补间。过渡起点 = 浏览器上一次渲染过的样式, 哪一帧被渲染由缓存/网速/主线程决定 —— 渲染到"满宽贴顶"那帧就会从上方飞入。 对策(不动库任何逻辑):用 :not([style]) 只命中"还没有内联样式"的那一瞬,把这一瞬做成 屏幕中心的小点。库一写内联样式该规则立即失效,因此绝不影响最终显示,也不会与库打架; 过渡仍是库自带的,所以动画完整保留。 本次移除上一版"临时关 options.transition"的整段补丁。 本机验收:9 套 jsdom 守卫测试全绿;浏览器六项全过(拖动跟手+回弹、横划 120px 切、 竖划不切、中途不翻页、捏合 351→1615、双击 1615→2751、切图后不误关); 飞入专项按 Claude 的延迟加载法执行;最终显示核对(宽度非 1px、opacity=1、已写内联样式)。 注:本机模拟环境复现不出真机那个飞入,最终以真机为准。 过程记录:本轮先被守卫拦下一次(把 CSS 误放进