gpt4 book ai didi

javascript - 使用 d3 生成适合文本大小的矩形

转载 作者:行者123 更新时间:2023-11-30 15:02:54 24 4
gpt4 key购买 nike

Lars Kotthof 有很好的解释 here如何创建与文本大小相对应的 SVG 元素。但是,我希望使用从 JSON 或 CSV 中提取的数据动态执行此操作。

JS Fiddle here .

    svg.selectAll('rect')
.data(states.features)
.enter()
.append('rect')
.attrs({
x: function(d) { return path.centroid(d)[0] - 50; },
y: function(d) { return path.centroid(d)[1] - 13; },
'text-anchor': 'middle',
'width': 100,
'height': 18,
'fill': 'rgba(232, 232, 232, 0.8)',
'opacity': 1,
'rx': 7,
'ry': 7
});

svg.selectAll('text')
.data(states.features)
.enter()
.append('text')
.text(function(d) { return d.properties.name; })
.attrs({
x: function(d) { return path.centroid(d)[0]; },
y: function(d) { return path.centroid(d)[1]; },
'text-anchor': 'middle',
'font-size': '7pt',
'fill': 'rgb(25,25,25)',
'opacity': 1
});

我没有掌握的概念是如何编写一个类似于 Lars 的函数,它创建了 <rect><text>并使用文本的尺寸来确定矩形的尺寸。

最佳答案

这是一个解决方案和相关的 JS Fiddle .基本上我所做的是为每个矩形和文本分配相应的ID,然后在生成文本后,根据文本调整矩形大小。此外,文本的 x 位置也必须相应调整。

svg.selectAll('rect')
.data(states.features)
.enter()
.append('rect')
.attrs({
y: function(d) { return path.centroid(d)[1] - 13; },
'text-anchor': 'middle',
'width': 100,
'height': 18,
'fill': 'rgba(232, 232, 232, 0.8)',
'opacity': 1,
'rx': 7,
'ry': 7
});

svg.selectAll('text')
.data(states.features)
.enter()
.append('text')
.text(function(d) { return d.properties.name; })
.attrs({
x: function(d) { return path.centroid(d)[0]; },
y: function(d) { return path.centroid(d)[1]; },
'text-anchor': 'middle',
'font-size': '7pt',
'fill': 'rgb(25,25,25)',
'opacity': 1,
id: function(d) { return 'text' + d.id }
});

svg.selectAll('rect')
.attr('width', function(d) { return document.getElementById('text'+d.id).getBBox().width; })
.attr('x', function(d) { return path.centroid(d)[0] - document.getElementById('text'+d.id).getBBox().width / 2; });

关于javascript - 使用 d3 生成适合文本大小的矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46242907/

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