本文深入解析 html canvas 的 `scale()` 变换与画布物理尺寸(`width`/`height` 属性)的本质区别,阐明为何仅调用 `ctx.scale()` 无法改变容器溢出行为,并提供可交互的动态缩放实现方案。
在 Canvas 开发中,一个常见误区是混淆 绘图上下文的变换(如 scale()) 与 画布自身的像素尺寸(canvas.width/canvas.height)。这两者作用层级不同,直接影响渲染结果和 DOM 布局行为。
✅ 正确做法是:同步调整画布物理尺寸 + 应用坐标系缩放 + 清空并重绘。这样既保证图像按比例显示,又使画布 DOM 尺寸与视觉内容严格匹配,滚动行为自然受控。
以下为完整可运行示例(含滑块控制缩放):
? 关键注意事项:
通过精准控制画布物理尺寸与绘图逻辑的协同,即可实现类似 Photoshop 的平滑缩放体验:图像随缩放比例自适应容器,滚动条智能响应真实内容边界。