Svg 缩放到特定的矩形

Svg zoom to specific rect

我有包含多个分组元素的 SVG。我要做的是放大到具体的组。

我已经得到 {top, left, width, height} 的矩形,我想缩放到(更改我的 SVG 的 viewBox 属性)。

有什么简单的方法可以计算 viewBox 的正确值?

您可以将 viewBox 设置为等于 "top left width height":

这是一个简单的例子。单击任一矩形将缩放该矩形的屏幕。再次点击它会 return 屏幕回到原来的缩放比例。

var selected = false;
var svg = document.getElementById('svg');

var zoomOnElement = function(e) {
    if (e.target === selected) {
 // Deselect element
 svg.setAttribute("viewBox", "0 0 600 400");
 selected = false;
    } else {
 // Select element
 selected = e.target;
 var viewBox = selected.getAttribute('x');
 viewBox += " " + selected.getAttribute('y')
 viewBox += " " + selected.getAttribute('width')
 viewBox += " " + selected.getAttribute('height')
 svg.setAttribute("viewBox", viewBox);
    }
}

document.getElementById('rect-1').addEventListener("click", zoomOnElement);
document.getElementById('rect-2').addEventListener("click", zoomOnElement);
<svg xmlns="http://www.w3.org/2000/svg" width="300" height="200" viewBox="0 0 600 400" id="svg">

   <rect id="background" width="600" height="400" fill="#eee"/>
   <rect id="rect-1" x="100" y="50" width="50" height="300" fill="red"/>
   <rect id="rect-2" x="225" y="175" width="300" height="50" fill="blue"/>
   
</svg>