我的问题是该问题的扩展: D3.js: How to get the computed width and height for an arbitrary element?
但是,对于我而言,我想获得由D3创建的元素的组的计算高度。
该组中的项目创建如下:
const boxGroup = mainArea.selectAll('.boxes-user')
.data(data)
.enter()
.append("g")
.attr('id', (d) => 'bars-user-' + d[0].userId )
.attr("transform", (d) => {
currentRow = currentRow + 1;
return "translate( 0, " + ((rowHeight * currentRow) + (20 * currentRow)) + ")"
});
这将创建多个<g>
元素。 data
数组中的每一项。
我希望能够确定每个生成的.boxes-user
组的计算出的最终高度。
这可能吗?如果是,怎么办?
答案 0 :(得分:1)
计算<g>
元素的宽度和高度与使用getBBox()
完全相同。由于所引用的链接未提供示例,因此这里是一个控制台,用于记录包含随机元素的<g>
元素的高度。
var data = [{type: 'text',value: "Test1"}, {type: 'rect', value: {w: 40, h: 70}}, {type: 'circle', value: {r: 12, x: 120}}];
const boxGroup = d3.select('svg').selectAll('.boxes-user')
.data(data)
.enter()
.append("g").classed('boxes-user', true)
.attr("transform", function (d, i) {
return "translate(" + (i * 100) + ", 30)";
}).each(function (d) {
if(d.type === 'circle') {
d3.select(this).append('circle').style('fill', d.value.color || 'steelblue')
.attr('r', d.value.r || 10).attr('cx', d.value.x || 20);
} else if(d.type === 'rect') {
d3.select(this).append('rect').attr('width', d.value.w || 40).attr('height', d.value.h || 20);
} else {
d3.select(this).append('text').text(d.value);
}
// "this" is the group element here. Computing height for the same
console.log('height of ' + d.type + ': ' + d3.select(this).node().getBBox().height);
});
<script type="text/javascript" src="https://d3js.org/d3.v4.min.js"></script>
<svg width="700" height="500"></svg>
在计算尺寸之前,请确保已添加其中的元素,否则最终会导致结果为0。希望将其清除。