gpt4 book ai didi

javascript - 根据数据在 svg 中动态创建 rect

转载 作者:行者123 更新时间:2023-11-30 09:13:32 25 4
gpt4 key购买 nike

我刚开始学习 D3,想动态创建 <rect>在 SVG 内部,在 div 内部。

这是 html:

<div class="canvas">
<svg></svg>
</div>

这是我试过的 JS:

var data = [
{width: 300, height: 100, fill: 'purple'}
];
var c = d3.select('.canvas');
var r = c.select('svg').append('rect');//first creating an rect.
r.selectAll('rect').data(data)//then select whatever the rect i have inside svg
.enter().append('rect')
.attr('width', f=>f.width)
.attr('height', f=>f.height)
.attr('fill', f=>f.fill);

它完全没有显示错误。我不知道真正的错误在哪里。到处寻找,但没有找到任何合适的解决方案。

最佳答案

你的 r选择...

var r = c.select('svg').append('rect');

...对应一个<rect>元素。因此,您的输入选择...

r.selectAll('rect')
.data(data)
.enter()
.append('rect')
//etc...

... 将一个矩形附加到另一个矩形内:

<svg>
<rect>
<rect width="300" height="100" fill="purple"></rect>
</rect>
</svg>

那当然行不通。

因此,应该是:

var r = c.select('svg').selectAll('rect')
.data(data)
.enter()
.append('rect')
//etc...

这里是你的代码有那个变化:

var data = [{
width: 300,
height: 100,
fill: 'purple'
}];
var c = d3.select('.canvas');
var r = c.select('svg').selectAll('rect')
.data(data)
.enter()
.append('rect')
.attr('width', f => f.width)
.attr('height', f => f.height)
.attr('fill', f => f.fill);
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
<div class="canvas">
<svg></svg>
</div>

关于javascript - 根据数据在 svg 中动态创建 rect,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56823781/

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