function computeDimensions(selection) {
var dimensions = null;
var node = selection.node();
if (node instanceof SVGGraphicsElement) { // check if node is svg element
dimensions = node.getBBox();
} else { // else is html element
dimensions = node.getBoundingClientRect();
}
console.log(dimensions);
return dimensions;
}
下面隐藏的片段中有一个小演示。我们用相同的函数处理蓝色div和红色svg圆圈上的点击。
var svg = d3.select('svg')
.attr('width', 50)
.attr('height', 50);
function computeDimensions(selection) {
var dimensions = null;
var node = selection.node();
if (node instanceof SVGElement) {
dimensions = node.getBBox();
} else {
dimensions = node.getBoundingClientRect();
}
console.clear();
console.log(dimensions);
return dimensions;
}
var circle = svg
.append("circle")
.attr("r", 20)
.attr("cx", 30)
.attr("cy", 30)
.attr("fill", "red")
.on("click", function() { computeDimensions(circle); });
var div = d3.selectAll("div").on("click", function() { computeDimensions(div) });
<h3>
Click on blue div block or svg circle
</h3>
<svg></svg>
<div class="div"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.11.0/d3.min.js"></script>
4条答案
按热度按时间qnzebej01#
对于SVG元素
使用像
selection.node().getBBox()
这样的值,可以得到如下值:HTML元素
使用
selection.node().getBoundingClientRect()
kadbb4592#
**.getBoundingClientRect()**返回元素的大小及其相对于视口的位置。
示例:
6tqwzwtp3#
有一次我遇到了一个问题,我不知道哪个元素当前存储在我的变量(svg或html)中,但我需要得到它的宽度和高度。我创建了这个函数,并想分享它:
下面隐藏的片段中有一个小演示。我们用相同的函数处理蓝色div和红色svg圆圈上的点击。
ijxebb2r4#
通过直接调用clientWidth使用更少的代码: