前端知库

Canvas 的 transform 怎样影响坐标和绘制?

理解当前变换矩阵、translate、scale、rotate 和 save/restore,避免把页面坐标直接当成 Canvas 绘制坐标。

参考答案

Canvas 2D 上下文会维护当前变换矩阵,后续绘制的坐标会经过平移、缩放、旋转等变换。save() 和 restore() 保存、恢复绘制状态,适合把局部变换限制在一个图形或组件内。

高 DPI 画布通常先按设备像素比放大画布,再用 scale 把绘制坐标保持在 CSS 尺寸,这时鼠标事件的页面坐标要先减去画布边界并处理缩放矩阵,才能正确命中图形。复杂编辑器还需要逆矩阵把屏幕坐标转换回世界坐标。

变换不会自动改变已绘制的像素,也不会替你处理裁剪、清空和命中测试。绘制顺序、状态栈和坐标空间要明确,否则很容易出现图形位置正确但交互区域错误的问题。