From 6bb8031b6f740578174fbe53f60557c821aeabe1 Mon Sep 17 00:00:00 2001 From: rike Date: Mon, 26 Oct 2026 15:49:52 +0800 Subject: [PATCH] Preserve fractional preview sizes at native browser zoom --- README.md | 2 + atlas/viewer.js | 34 +- docs/ui/native-zoom/README.md | 38 + docs/ui/native-zoom/edge-110.png | Bin 0 -> 85656 bytes docs/ui/native-zoom/measurements.json | 1331 +++++++++++++++++++++++++ tests/native-zoom.mjs | 140 +++ tests/native-zoom.spec.mjs | 97 ++ 7 files changed, 1628 insertions(+), 14 deletions(-) create mode 100644 docs/ui/native-zoom/README.md create mode 100644 docs/ui/native-zoom/edge-110.png create mode 100644 docs/ui/native-zoom/measurements.json create mode 100644 tests/native-zoom.mjs create mode 100644 tests/native-zoom.spec.mjs diff --git a/README.md b/README.md index 8f45476..5fc8977 100644 --- a/README.md +++ b/README.md @@ -99,3 +99,5 @@ 详情查看器默认完整留在当前窗口内。全部资源在自动模式中使用预览容器的实际宽高、100% 比例重新排版,组件保持正常字号;手动设备模拟按可用宽度等比适应。桌面关闭“适应画布”可按当前设备的原尺寸滚动查看。长演示内容、源码和说明在各自区域内滚动,外层页面无需下滑。高度不超过 480px 时收起站点导航,可用查看器左上角返回按钮回到资源列表。[适配规则与截图](docs/ui/viewport-fit/README.md)。 组件详情在宽屏合并标题与内容操作行,动效参数位于预览工具栏,说明栏减少重复标签与留白。详情说明覆盖在画布右侧,独立滚动;开关详情不改变演示尺寸或位置。窄屏说明覆盖预览,关闭后恢复操作。查看完整画布时可关闭说明或进入全屏。[稳定性对比与验证](docs/ui/stable-details/README.md)。[空间与清晰度对比](docs/ui/component-clarity/README.md)。 + +原生页面缩放与经典滚动条也纳入验证:自动预览用容器百分比保持小数尺寸,设备模拟按实际宽度适应,避免 110% 等倍率下反复触发滚动条。[缩放稳定性与验证](docs/ui/native-zoom/README.md)。 diff --git a/atlas/viewer.js b/atlas/viewer.js index bd49789..5dfe779 100644 --- a/atlas/viewer.js +++ b/atlas/viewer.js @@ -327,23 +327,29 @@ export function createViewer({ if (layout.style.getPropertyValue("--preview-tools-height") !== toolsHeight) layout.style.setProperty("--preview-tools-height", toolsHeight); const automatic = !appState.width && (innerWidth < 1024 || appState.fit); - const desired = automatic - ? viewport.clientWidth - : appState.width || appState.selected.preview.width; - // Device presets constrain width. Give their document the visible height, - // so short windows scroll inside the demo instead of shrinking all controls. + const desired = appState.width || appState.selected.preview.width; + // Browser zoom produces fractional content boxes. Percentage constraints + // fit those boxes exactly; writing rounded clientWidth/clientHeight back + // can alternately add/remove classic scrollbars on every observer callback. + canvas.style.width = automatic + ? "100%" + : appState.fit + ? `min(100%, ${desired}px)` + : desired + "px"; + canvas.style.height = + automatic || appState.width + ? "100%" + : appState.selected.preview.height + "px"; const scale = automatic || !appState.fit ? 1 - : Math.min(1, viewport.clientWidth / desired); - const h = - automatic || appState.width - ? viewport.clientHeight / scale - : appState.selected.preview.height; - canvas.style.width = desired * scale + "px"; - canvas.style.height = h * scale + "px"; - frame.style.width = desired + "px"; - frame.style.height = h + "px"; + : Math.min(1, parseFloat(getComputedStyle(canvas).width) / desired); + frame.style.width = automatic ? "100%" : desired + "px"; + frame.style.height = automatic + ? "100%" + : appState.width + ? 100 / scale + "%" + : appState.selected.preview.height + "px"; frame.style.transform = `scale(${scale})`; element("#preview-scale").textContent = `${Math.round(scale * 100)}%`; } diff --git a/docs/ui/native-zoom/README.md b/docs/ui/native-zoom/README.md new file mode 100644 index 0000000..3612551 --- /dev/null +++ b/docs/ui/native-zoom/README.md @@ -0,0 +1,38 @@ +# 原生缩放与真实滚动条下的预览稳定性 + +本轮处理的是整幅预览 UI 的尺寸振荡。用户确认 Edge 页面缩放 100% 正常,110% 后静置也抖动;Windows 显示缩放为 100%,鼠标移到页面外仍发生。 + +## 原因与复现 + +原先读取整数 `clientWidth/clientHeight`,再将它们写回画布和 iframe 的像素尺寸。原生缩放下容器实际宽高可能是小数,整数回写产生溢出。经典滚动条出现后可用宽高缩小,ResizeObserver 再缩小画布,滚动条消失后又放大,形成逐帧循环。 + +Playwright 默认在无头模式加入 `--hide-scrollbars`。此前测试没有保留滚动条,遗漏了该循环。本轮测试明确移除这个默认参数,启动完整 Chromium,通过浏览器设置 API 改变原生页面缩放,并验证 DPR,未用 CSS zoom、捏合模拟或单纯改变 viewport 代替。 + +同一旧版本 `66bb953`、1910×873 浏览器窗口、110% 原生缩放下,90 帧触发 90 次 iframe resize,可用宽高在 1727×572 与 1713×558 CSS px 之间反复切换。1440px 窗口的 150%、1273px 窗口的 125% 也复现。 + +## 修复与结果 + +自动画布与 iframe 以百分比匹配真实容器;设备模式用 CSS `min()` 限制宽度,再从实际计算宽度得到缩放比例,高度也由百分比承载。原始尺寸模式继续允许必要滚动,不关闭浏览器滚动条,不停止演示动画。 + +| 条件 | 修复前 | 修复后 | +| ----------------------------- | ------------ | ------------ | +| 110%、90 帧中的 iframe resize | 90 次 | 0 次 | +| 同一静置区间的画布状态 | 两组反复切换 | 一组稳定状态 | +| iframe 内部经典滚动条 | 显示 | 显示 | + +[完整对比及逐倍率数据](measurements.json)、[Linux Edge 110% 截图](edge-110.png)。每个倍率的前后状态比较在各自的静置区间内进行;主动改变缩放、窗口、设备或全屏产生的正常尺寸变化不计为抖动。 + +## 验收 + +- 完整 Chromium 原生设置:100%、110%、125%、150%、175%、200%、返回 100% 再到 110%。同一页面实时切换,也验证在 110% 重新载入。 +- 1910×873、1440×655、900×900 浏览器窗口,保留经典滚动条;自动、375/768px 设备、原始尺寸、详情、全屏及退出。 +- 静置逐帧比较画布、卡片、内部根节点和滚动位置,要求零 iframe resize;缩放和控制操作不增加文档请求,原文档和表单输入保留。 +- 三引擎既有关键流程与完整生产测试继续执行。另在临时解压的 Microsoft Edge 155.0.4283.62(Linux)中实际执行相同原生缩放与 90 帧检查;没有安装到系统或修改依赖版本。尚未在原生 Windows 上人工验证。 + +测试见 `tests/native-zoom.spec.mjs` 与 `tests/native-zoom.mjs`。浏览器窗口尺寸包含浏览器 UI,记录与截图以实际网页尺寸及 DPR 为准。 + +本地最终验证:`npm run check` 通过(严格类型检查与 12 项单元测试);`npm test` 先完成生产构建,再通过全部 156 项浏览器测试(Chromium 140、Firefox 8、WebKit 8),无跳过或 flaky;`npm run test:dev` 的热更新验收通过。原生缩放、跨浏览器与沉浸预览的 31 项定向回归也通过。独立 Linux Edge 与 Chromium 的各 8 轮原生倍率检查,每轮 90 帧均为零 resize、一组稳定状态。 + +## 发布与回退 + +CI 成功后以 Merge 合并,沿用现有 Pages 推送自动流程。以部署运行关联的确切 merge SHA、成功状态、线上新代码及 110% 真实滚动条检查共同确认发布。前一版为 `66bb953`;如需回退,应通过回退 PR、CI 和同一 Pages 流程恢复,保留历史,不强推主分支。本轮不额外创建 Release 或升级版本。 diff --git a/docs/ui/native-zoom/edge-110.png b/docs/ui/native-zoom/edge-110.png new file mode 100644 index 0000000000000000000000000000000000000000..94aab92a6d02361e4942948fa5cf89884f296d35 GIT binary patch literal 85656 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

C- z0WLObnU0rxdsH+X_Hvt*)gzRIAZ8bhiDUHI&}c|TOGbDI3I7aNQY#VHM`bdHjX~1R z((Kb@71+IqQeUOV)G(hD%zW1L7|8Je0W|Ds2&fO2`m_aGe%5siP58(8whZe5V}b`P z4ZxsmqLi)d#dV~wWu3%w2$aVU?(KjOXV_+#s)X&0EY|RhL+pBvdb3>=CO40{B3imF zf!9v%i)3St2-Mb-ve576Pd+rxxa+f>b|~a_ z+1T!EywAba75ww@J%*dr1u^;F^|Ea0r2h5ryd5Nye^$*pL~)NI?OA3q*E7`~D=;7gkQwoI-LsWJnpb#g>vQ676eygjxl42gP}E{oI-$0~?s2OUcN0hoLh zSXkFYBZSgVp+>{GzwJzT8!Avy=d@8*K}v!BhqLVmFa^+pW#F?83GG(oN$4_DO-wM~ z@Y;K)gL|Pmxq=DGoDV~(2MLX$wftD_#716KjNyvP=b+mOmaD|N=> zUi$PPiue*)h4&yvBMWPO;2b{LRwz?l8{N^w!T%o?kaeShtjnPrYsl7G3oQYmf-I7G zW9ktOU1L*`AHV9wA=X$-cdyJevu+1D$U$GA@^{x3A0)O6?XC+IkacAhWb*@H^IoDa z`AXWf;h=p9$MC#^Qv=Yk2@iNXoT~NO75$t(oS_(50&y2+iY-t^*#MM(Wn>0yi;8=W zO7>;sao`;Tut%qLrfrS!MkKxxFnBnC4zD24y|$C!8~|<)lZ|;dk?6^Uoe0H`9l$1e zAMZgywx#o)K8blnGPya8f~hK-y0*Sk)S?n1!V#VEz1(@_elEqr9)GQBiN4$LMt<0{ zd*N!iQ>Nd6SQbiOeZ+L83r|0>ifeIXo`js7Hh

7Z3aCZ)0|)8)jmeL`1pS@4MvX?3 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 TiaF>Oqfjaen)2mxw;ui typeof chrome.settingsPrivate?.setDefaultZoom === "function", + ); + return { + context, + async setZoom(factor, page) { + // The browser's own settings API changes native page zoom (and DPR), + // rather than pinch emulation, CSS zoom or just viewport dimensions. + await settings.evaluate( + (zoom) => + new Promise((resolve) => + chrome.settingsPrivate.setDefaultZoom(zoom, resolve), + ), + factor, + ); + if (page) { + await page.bringToFront(); + await expect + .poll(() => page.evaluate(() => devicePixelRatio)) + .toBeCloseTo(factor, 4); + } + }, + async close() { + await context.close(); + await rm(profile, { recursive: true, force: true }); + }, + }; + } catch (error) { + await context?.close(); + await rm(profile, { recursive: true, force: true }); + throw error; + } +} + +export async function recordStableZoom(page, frames = 40) { + await page.evaluate(() => document.fonts.ready); + await page + .locator("#case-preview") + .evaluate((f) => f.contentDocument.fonts.ready); + return page.locator("#case-preview").evaluate(async (frame, count) => { + for (let i = 0; i < 4; i++) await new Promise(requestAnimationFrame); + const doc = frame.contentDocument, + viewport = document.querySelector("#preview-viewport"), + root = doc.querySelector("#root, #preview-root") || doc.body; + const grid = doc.querySelector(".demo-surface > div > .grid"); + const rect = (el) => { + const r = el.getBoundingClientRect(); + return [r.x, r.y, r.width, r.height]; + }; + let resizes = 0; + const resized = () => resizes++; + frame.contentWindow.addEventListener("resize", resized); + const samples = []; + try { + for (let i = 0; i < count; i++) { + await new Promise(requestAnimationFrame); + samples.push({ + viewport: rect(viewport), + frame: rect(frame), + root: rect(root), + cards: grid ? [...grid.children].map(rect) : [], + viewportWidth: viewport.clientWidth, + viewportHeight: viewport.clientHeight, + scrollWidth: viewport.scrollWidth, + scrollHeight: viewport.scrollHeight, + scroll: [ + viewport.scrollLeft, + viewport.scrollTop, + frame.contentWindow.scrollX, + frame.contentWindow.scrollY, + ], + innerWidth: frame.contentWindow.innerWidth, + innerHeight: frame.contentWindow.innerHeight, + }); + } + } finally { + frame.contentWindow.removeEventListener("resize", resized); + } + return { + resizes, + samples, + dpr: devicePixelRatio, + innerScrollbar: + frame.contentWindow.innerWidth - doc.documentElement.clientWidth, + sameDocument: frame.contentDocument === doc, + }; + }, frames); +} + +export function expectStableZoom(result, fitted = true) { + expect(result.sameDocument).toBe(true); + expect(result.resizes).toBe(0); + expect(result.samples.length).toBeGreaterThan(20); + for (const sample of result.samples) { + expect(sample).toEqual(result.samples[0]); + if (fitted) { + expect(sample.scrollWidth).toBe(sample.viewportWidth); + expect(sample.scrollHeight).toBe(sample.viewportHeight); + const [x, y, width, height] = sample.frame, + [vx, vy, vw, vh] = sample.viewport; + expect(x).toBeGreaterThanOrEqual(vx - 0.1); + expect(y).toBeGreaterThanOrEqual(vy - 0.1); + expect(x + width).toBeLessThanOrEqual(vx + vw + 0.1); + expect(y + height).toBeLessThanOrEqual(vy + vh + 0.1); + } + } +} diff --git a/tests/native-zoom.spec.mjs b/tests/native-zoom.spec.mjs new file mode 100644 index 0000000..019aa8f --- /dev/null +++ b/tests/native-zoom.spec.mjs @@ -0,0 +1,97 @@ +import { test, expect } from "@playwright/test"; +import { + createNativeZoomBrowser, + recordStableZoom, + expectStableZoom, +} from "./native-zoom.mjs"; + +for (const [width, height, resource] of [ + [1910, 873, "block/magicui-bento-grid"], + [1440, 655, "component/folio-form"], + [900, 900, "block/magicui-bento-grid"], +]) { + test(`Native zoom and real scrollbars keep ${resource} stable at ${width}×${height}`, async ({ + baseURL, + }, info) => { + test.setTimeout(150000); + const native = await createNativeZoomBrowser({ baseURL, width, height }); + try { + const page = await native.context.newPage(); + const errors = []; + page.on("pageerror", (e) => errors.push(e.message)); + let documents = 0; + page.on("request", (r) => { + if (r.isNavigationRequest() && r.frame() !== page.mainFrame()) + documents++; + }); + await page.goto(`#${resource}?lang=zh-CN&theme=dark`); + await expect(page.locator(".viewer-load-state")).toBeHidden(); + if (resource.includes("form")) + await page + .frameLocator("#case-preview") + .locator("input[type=email]") + .fill("zoom@example.com"); + await page.locator("#case-preview").evaluate((f) => { + window.zoomDocument = f.contentDocument; + }); + const initialRequests = documents, + records = []; + // The same live document crosses zoom levels and breakpoint boundaries. + for (const factor of [1, 1.1, 1.25, 1.5, 1.75, 2, 1, 1.1]) { + await native.setZoom(factor, page); + await page.mouse.move(0, 0); + for (const device of ["0", "375", "768"]) { + await page.locator(`[data-device="${device}"]`).click(); + await page.mouse.move(0, 0); + const result = await recordStableZoom(page); + expectStableZoom(result); + if (resource.includes("bento")) + expect(result.innerScrollbar).toBeGreaterThan(0); + records.push({ factor, device, ...result }); + } + await page.locator('[data-device="0"]').click(); + } + await page.locator("[data-fit]").click(); + expectStableZoom(await recordStableZoom(page), false); + await page.locator("[data-fit]").click(); + const before = await recordStableZoom(page); + await page.locator(".experience-actions [data-toggle-details]").click(); + const open = await recordStableZoom(page); + expectStableZoom(open); + expect(open.samples[0].frame).toEqual(before.samples[0].frame); + await page.locator(".inspector-close").click(); + await page.locator("[data-fullscreen]").click(); + await expect(page.locator("#preview-panel:fullscreen")).toBeVisible(); + expectStableZoom(await recordStableZoom(page)); + await page.locator("[data-exit-fullscreen]").click(); + expectStableZoom(await recordStableZoom(page)); + expect( + await page + .locator("#case-preview") + .evaluate((f) => f.contentDocument === window.zoomDocument), + ).toBe(true); + if (resource.includes("form")) + await expect( + page.frameLocator("#case-preview").locator("input[type=email]"), + ).toHaveValue("zoom@example.com"); + expect(documents - initialRequests).toBe(0); + await page.reload(); + await expect(page.locator(".viewer-load-state")).toBeHidden(); + // Also exercise a cold load at 110%, independently of live transitions. + expectStableZoom(await recordStableZoom(page)); + // Reload is expected to add one document request, zoom and controls none. + expect(documents - initialRequests).toBe(1); + expect(errors).toEqual([]); + await info.attach("native-zoom-frames.json", { + body: JSON.stringify(records), + contentType: "application/json", + }); + await info.attach("native-zoom-110.png", { + body: await page.screenshot(), + contentType: "image/png", + }); + } finally { + await native.close(); + } + }); +}