Svg 将鼠标滚轮上的viewBox(带Raphael)设置为放大/缩小

Svg 将鼠标滚轮上的viewBox(带Raphael)设置为放大/缩小,svg,raphael,Svg,Raphael,我用拉斐尔画了一些形状,比如矩形和圆形。 在这里: 缩放功能如下所示: function doZoom(coords, factor) { //transform real coordinates into viewbox coordinates debugger; x = Number(viewbox[0]) + Number(coords.x / zoom); y = Number(viewbox[1]) + Number(coords.y / zoom);

我用拉斐尔画了一些形状,比如矩形和圆形。 在这里:

缩放功能如下所示:

function doZoom(coords, factor) {
   //transform real coordinates into viewbox coordinates
   debugger;
   x =  Number(viewbox[0]) + Number(coords.x / zoom);
   y =  Number(viewbox[1]) + Number(coords.y / zoom);

   if (factor < 0) {
     factor = 0.95;
   } else {
      factor = 1.05;
   }

   var z = ((zoom || 1) * factor) || 1;
   zoom = z;

   //zoom viewbox dimensions
   viewbox[2] = bbox.width / zoom;
   viewbox[3] = bbox.height / zoom;

   //transform coordinates to new viewbox coordinates
   viewbox[0] = x - coords.x / zoom;
   viewbox[1] = y - coords.y / zoom;

   paper.setViewBox.apply(paper, viewbox,true);
 }
函数doZoom(坐标,因子){
//将实坐标转换为视口坐标
调试器;
x=数字(viewbox[0])+数字(coords.x/zoom);
y=编号(viewbox[1])+编号(coords.y/缩放);
如果(系数<0){
系数=0.95;
}否则{
系数=1.05;
}
var z=((缩放| | 1)*因子)| | 1;
缩放=z;
//缩放视口尺寸
viewbox[2]=bbox.width/缩放;
viewbox[3]=bbox.height/缩放;
//将坐标变换为新的视口坐标
viewbox[0]=x-coords.x/缩放;
viewbox[1]=y-coords.y/缩放;
paper.setViewBox.apply(paper,viewbox,true);
}
我有一个“适合屏幕””按钮,如果在视口之外绘制(即可见绘图区域),该按钮将显示所有形状。“第四个圆”是一个圆心为(-50,-50)的圆。因此,点击“适合屏幕”,所有的形状都是可见的

在鼠标滚轮上也实现了放大和缩小,但我面临的问题是:在适应屏幕之前单击按钮时,鼠标滚轮上的放大/缩小功能正常。但当我点击“适应屏幕”按钮,并尝试在任何点进行缩放时,缩放级别突然发生了变化。假设您第一次缩小并单击“适应屏幕”,然后尝试使用鼠标滚轮缩放第一个圆。缩放处于上一状态(即缩小状态)。但我需要缩放第一个圆,因为我的鼠标指针指向当前缩放级别(即缩放的拉伸级别)的第一个圆


感谢您的帮助。

如果有人可能面临相同的问题,这可能是解决方案。我在这里解决了上述问题。这是一个链接[link],你也可以使用raphael pan zoom插件()来实现平移和缩放功能,它很简单,也很好用!可能重复的