在定点上实现缩放,javascript/canvas

在定点上实现缩放,javascript/canvas,javascript,html,canvas,Javascript,Html,Canvas,可能重复: 我想用鼠标滚轮在鼠标指针上实现缩放。即在鼠标指针下的点保持固定的情况下缩放图像 这是我的代码,不太好用 var scala = 1 + event.wheelDelta / 1000; canvas.context.translate(-canvas.mouse.x * ( scala - 1 ) / canvas.scale,-canvas.mouse.y * ( scala - 1 ) / canvas.scale); canvas.context.scale(scala,sc

可能重复:

我想用鼠标滚轮在鼠标指针上实现缩放。即在鼠标指针下的点保持固定的情况下缩放图像

这是我的代码,不太好用

var scala = 1 + event.wheelDelta / 1000;
canvas.context.translate(-canvas.mouse.x * ( scala - 1 ) / canvas.scale,-canvas.mouse.y * ( scala - 1 ) / canvas.scale);
canvas.context.scale(scala,scala);
canvas.scale *= scala;
//canvas.scale is my variable that is initially set to 1.
//canvas.mouse is my variable that represents the mouse position relative to the canvas

我的猜测是,如果要保存缩放级别,每次重画后都需要执行
canvas.context.restore()

在不查看任何其他内容的情况下,需要进行两次转换:一次在将鼠标点移动到(0,0)之前,一次在移动(0,0)之后(现在是缩放图片)到鼠标所在的位置。

解决了这个问题,答案是:

什么都不做,或者行为不正确,鼠标.x在窗口坐标中,而translate使用缩放坐标,这就是问题所在。如果我使用scale(1.3,1.3);量表(0.7,0.7);对象将返回到原始位置,但1*1.3*0.7=1鼠标.x在画布坐标中,或屏幕坐标?1.3*0.7接近1(0.91)。你能把完整的密码放进去吗?