我需要确切知道任意g
元素的宽度和高度,SVG
因为一旦用户单击它,就需要在其周围绘制一个选择标记。
我在互联网上看到的是这样的:d3.select("myG").style("width")
。问题在于该元素将不会总是具有明确的width属性集。例如,当我在中创建一个圆时g
,将r
设置半径()而不是宽度。即使我在window.getComputedStyle
上使用了方法circle
,它也会返回“自动”。
有没有一种方法可以计算中的任意svg
隔离的宽度D3
?
谢谢。
我需要确切知道任意g
元素的宽度和高度,SVG
因为一旦用户单击它,就需要在其周围绘制一个选择标记。
我在互联网上看到的是这样的:d3.select("myG").style("width")
。问题在于该元素将不会总是具有明确的width属性集。例如,当我在中创建一个圆时g
,将r
设置半径()而不是宽度。即使我在window.getComputedStyle
上使用了方法circle
,它也会返回“自动”。
有没有一种方法可以计算中的任意svg
隔离的宽度D3
?
谢谢。
Answers:
使用类似的东西selection.node().getBBox()
会得到类似的价值
{
height: 5,
width: 5,
y: 50,
x: 20
}
用 selection.node().getBoundingClientRect()
.getBoundingClientRect()返回元素的大小及其相对于视口的位置。
范例:
var element = d3.select('.elementClassName').node();
element.getBoundingClientRect().width;
当我不知道当前存储在变量(svg或html)中的哪个元素但我需要获取宽度和高度时,遇到了这个问题。我创建了此功能,并希望共享它:
function computeDimensions(selection) {
var dimensions = null;
var node = selection.node();
if (node instanceof SVGElement) { // check if node is svg element
dimensions = node.getBBox();
} else { // else is html element
dimensions = node.getBoundingClientRect();
}
console.log(dimensions);
return dimensions;
}
下面的隐藏摘要中的小演示。我们用相同的功能处理蓝色div和红色svg圆上的单击。
getBoundingClientRect()
而不要使用SVG-onlygetBBox()
。像这样:d3.select("body").node().getBoundingClientRect().width