缩放并计算新的鼠标点

时间:2016-10-28 22:19:48

标签: javascript svg

我必须在我的应用程序中创建缩放功能。缩放听起来真的很容易,但我真的很麻烦。

好的,我有我的页面(橙色),在这个页面上是一个div(蓝色)。在这个div中是一个带有组(灰色)的SVG。该组具有带变换矩阵的偏移量。 e.g。

<g transform="matrix(1,0,0,1,-188,-101)"><!-- [...] --></g>

您可以拖放元素,也可以移动组。现在,我想添加缩放功能。我通过改变矩阵来实现这一点。例如矩阵(2,0,0,2,-188,-101)是规模的两倍。

如果我只缩放组,我当前的元素不在我的观点范围内。我必须改变偏移量才能让它们回到视点。

我的第一个想法是将偏移量乘以2.但这不起作用。所以,我想了一下这个话题。我的下一个想法是获得鼠标点和距离组中间点的距离。然后按我的比例因子缩放此距离。但这也行不通。我不再有任何想法如何解决这个问题。 我也可以获得所有元素的所有高度和宽度。 enter image description here

1 个答案:

答案 0 :(得分:0)

以下是如何获得比例:

var width = shape.width; 
var currentScaledWidth = width * oldScale; 
var scaledWidth = currentScaledWidth + (width * scale); 
var scale = (scaledWidth) / width;

然后你应该能够用它来获得位置

var x = mouseX * scale; 
var y = mouseY * scale;

然后你可以滚动容器

var halfX = (parentElement.style.width / 2),
    halfY = (parentElement.style.height / 2); 

var centerX = (halfX > x)? 
    (x - (x - halfX)) 
:
    (x + (halfX - x));

var centerY = (halfY > y)? 
    (y - (y - halfY)) 
:
    (y + (halfY - y));

parentElement.scrollTo(centerX, centerY);