javascript - HTML5 Canvas ~ 缩放并保持当前 Canvas 相对偏移量(视口中心点)
问题描述
上的帖子
放大一点(使用比例和平移)
并没有完全提供我正在寻找的答案;也就是说,“如何在缩放画布后将画布上位于视口窗口中心的当前点保持在相同的相对位置?”
解决方案
上面的蓝色矩形代表视口(监视器)。
红色矩形代表当前超出视口的画布。
当您缩放画布时,如何将红点保持在相同的相对位置?
让我们看一下 x 维度:
画布的当前宽度为 100 = 30 + 50 + 20
如果我们缩放 2 倍,则当前宽度变为 200 = 60 + 100 + 40;但是,视口仅代表新的 100 宽度中的 50:200 = 60 + (25 + 50 + 25) + 40
您真正关心的数字是放置画布的 x 和 y 偏移量;目前 x 偏移量为 -30。新的偏移量,使红点在 2 倍缩放后保持在相同的相对位置将是 -85 = (-1)*(60 + 25)。
新的相对位置将是 110 = 60 + 25 + 25(第二个 25 是视口尺寸的一半)。请注意,55 x 2 = 110。
在代码中:
boundingBoxLeft = boundingBox.left;
beginCanvasWidth = canvas.width;
canvas.width = canvasWidth*scaleFactor;
var scaleChange = canvas.width/beginCanvasWidth;
var leftOffset = ((-1)*boundingBoxLeft*scaleChange) +
(((window.innerWidth*scaleChange) - window.innerWidth)/2);
推荐阅读
- python - TypeError:“FormData”对象不可迭代
- monaco-editor - 使用 monaco-editor 编辑本地文件
- python - 如何打乱数据框中的元素
- java - 如何将数据从回收器视图按钮传递到片段?[科特林或 java]
- visual-studio-code - VSCode 终端 - 更改当前工作目录的颜色
- docker - 具有大型共享代码库的多个云运行服务
- kubernetes - 为什么在为 rego 策略应用 constraint.yaml 时显示错误?
- raspberry-pi - Vnc 没有连接到树莓派
- git - 为什么在 git 中选择默认编辑器时要使用“--wait”?
- spacy - spacy 可以用于一次更正整个句子而不仅仅是拼写检查一个单词吗?