gpt4 book ai didi

javascript - 如何获取所选内容中所有文本元素的边界框值?

转载 作者:行者123 更新时间:2023-12-03 04:23:30 24 4
gpt4 key购买 nike

我有一个像这样的 D3 选择:

const labels = svg.selectAll('text').data(data);
labels.enter().append('text')
.attr('class', (d) => `label-${d.label}`)
.attr('x', (d) => scale.x(d.time))
.attr('y', (d) => scale.y(d.value))
.text((d) => `${d.answer}`);

鉴于上面的代码,我如何才能获得创建的所有文本元素的边界框?我希望做一些类似于 Mike Bostock 如何在以下代码中获取一个文本元素的边界框的操作: https://bl.ocks.org/mbostock/1160929 。但是,我想获取每个元素的边界框值,因此我可以为每个文本元素创建一个 rect 元素。

最佳答案

我会这样做:

...
.text((d) => `${d.answer}`)
.each(function(d){
var bbox = this.getBBox();
svg.append('rect')
.attr('x', bbox.x)
.attr('y', bbox.y)
.attr('width', bbox.width)
.attr('height', bbox.height)
.style('fill', 'none')
.style('stroke', 'steelblue');
});

运行代码:

<!DOCTYPE html>
<html>

<head>
<script data-require="d3@4.0.0" data-semver="4.0.0" src="https://d3js.org/d3.v4.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/chance/1.0.8/chance.min.js"></script>
</head>

<body>
<script>

var w = 300,
h = 300;
var data = [
{
x: Math.random() * (w - 100),
y: Math.random() * h,
t: chance.word()
},{
x: Math.random() * (w - 100),
y: Math.random() * h,
t: chance.word()
},{
x: Math.random() * (w - 100),
y: Math.random() * h,
t: chance.word()
},{
x: Math.random() * (w - 100),
y: Math.random() * h,
t: chance.word()
},{
x: Math.random() * (w - 100),
y: Math.random() * h,
t: chance.word()
},{
x: Math.random() * (w - 100),
y: Math.random() * h,
t: chance.word()
},{
x: Math.random() * (w - 100),
y: Math.random() * h,
t: chance.word()
},{
x: Math.random() * (w - 100),
y: Math.random() * h,
t: chance.word()
},{
x: Math.random() * (w - 100),
y: Math.random() * h,
t: chance.word()
},{
x: Math.random() * (w - 100),
y: Math.random() * h,
t: chance.word()
},{
x: Math.random() * (w - 100),
y: Math.random() * h,
t: chance.word()
},{
x: Math.random() * (w - 100),
y: Math.random() * h,
t: chance.word()
},{
x: Math.random() * (w - 100),
y: Math.random() * h,
t: chance.word()
}
]

var svg = d3.select('body')
.append('svg')
.attr('width', w)
.attr('height', h);

const labels = svg.selectAll('text').data(data);

labels.enter()
.append('text')
.attr('class', (d) => `label-${d.t}`)
.attr('x', (d) => d.x)
.attr('y', (d) =>d.y)
.text((d) => d.t)
.each(function(d){
var bbox = this.getBBox();
svg.append('rect')
.attr('x', bbox.x)
.attr('y', bbox.y)
.attr('width', bbox.width)
.attr('height', bbox.height)
.style('fill', 'none')
.style('stroke', 'steelblue');
});

</script>
</body>

</html>

关于javascript - 如何获取所选内容中所有文本元素的边界框值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43836792/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com