我很久以前就制作了一个jsfiddle来演示如何缩放到中心(http://jsfiddle.net/Y69nm/1/)。现在我想缩放到给定点(光标),就像谷歌地图,但不知道该怎么做。我将实际鼠标坐标发送到处理缩放的功能。
这里是小提琴: http://jsfiddle.net/Y69nm/3/
以下是缩放功能:
function handle(delta, mousex, mousey) {
if (delta < 0) {
viewBoxWidth *= 0.95;
viewBoxHeight *= 0.95;
} else {
viewBoxWidth *= 1.05;
viewBoxHeight *= 1.05;
}
scale = paper.width / viewBoxWidth ;
console.log(scale);
// zoom to center
x = (paper.width / 2) - (viewBoxWidth / 2);
y = (paper.height / 2) - (viewBoxHeight / 2);
// i try to zoom to mouse cursor
var moveX = (mousex - (mousex * scale));
var moveY = (mousey - (mousey * scale));
x = 0 - moveX;
y = 0 - moveY;
paper.setViewBox(x, y, viewBoxWidth, viewBoxHeight);
}
答案 0 :(得分:3)
我可以让你更近一点:
x = 0 - moveX / scale;
y = 0 - moveY / scale;
这是你的updated fiddle。它缩放到点,但是,一旦缩放,如果你移动到另一个点并缩放它跳跃。
更新(2012年4月30日): 因为我也需要这个,所以我进一步努力消除了当缩放到另一个点时的跳跃。以下是Fiddle再次更新的更完整解决方案。