Html5 Canvas实现图片标记、缩放、移动和保存历史状态功能 (附转

2020-04-25 07:29:21易采站长站整理


// css
transform-origin: 180px 180px;
transform: scale(3, 3);

得到如下结果

ok,我们现在对比一下上面的结果,就会发现,放大3倍的时候,恰好是中间黑色方块占据了全部宽度。接下来我们就可以对这些点与原先没有进行变化(右边)的矩形进行对比就可以得到他们坐标的关系啦

2. 开始对两个坐标进行对比,然后推出公式

现在举一个简单的例子吧,例如我们算一下左上角的坐标(现在已经标记为黄色了)

其实我们其实就可以直接心算出来坐标的关系啦

这里左边计算坐标的值是我们鼠标按下的坐标

这里左边计算坐标的值是我们鼠标按下的坐标

这里左边计算坐标的值是我们鼠标按下的坐标

因为宽高是

360px
,所以分成3等份,每份宽度是
120px

因为变化之后容器的宽高是不变的,变化的只有矩形本身
我们可以得出左边的黄色标记坐标是
x:120 y:0
,右边的黄色标记为
x:160 y:120
(这个其实肉眼看应该就能看出来了,实在不行可以用纸笔算一算)

这个坐标可能有点特殊,我们再换几个来计算计算(根据特殊推一般)

蓝色标记:左边:

x:120 y:120
,右边:
x: 160 y:160
绿色标记:左边:
x: 240 y:240
,右边:
x: 200: y:200

好了,我们差不多已经可以拿到坐标之间的关系了,我们可以列一个表

还觉得不放心?我们可以换一下,缩放倍数与容器宽高等进行计算

不知道大家有没有感觉呢,然后我们就可以慢慢根据坐标推出通用的公式啦

(transformOrigin – downX) / scale * (scale-1) + down – translateX = point

当然,我们或许还有这个

translateX
没有尝试,这个就比较简单一点了,脑内模拟一下,就知道我们可以减去位移的距离就ok啦。我们测试一下

我们先修改一下样式,新增一下位移的距离