我试图通过增加和减少其半径来在圆上创建脉冲效果。我希望圆圈能够根据给定的数据集增长和缩小。我只能得到过渡函数,以增加或减少半径,但不能同时减少两者。
d3会自动为数组中的每个值创建一个不同的圆。我怎样才能使一个圆的半径随着它在数组中的迭代而增长和缩小?我到目前为止的简单版本如下。感谢您提供的任何帮助。
dataset = [30, 80, 150, 90, 20, 200, 180]
var svg = d3.select("body")
.append("svg")
.attr("width", w)
.attr("height", h);
var circle = svg.selectAll("circle")
.data(dataset)
.enter()
.append("circle");
circle
.attr("cx", 500)
.attr("cy", h/2)
.attr("r", dataset[0])
.attr("fill", "orange");
答案 0 :(得分:12)
这并不适合一般的D3数据/输入/更新/退出模式,因为您不是控制多个DOM元素,而是更改单个元素的属性。但是,您可以使用循环添加指定的过渡,轻松完成此操作。代码看起来像这样。
dataset.forEach(function(d, i) {
circle.transition().duration(duration).delay(i * duration)
.attr("r", d);
});
有关完整示例,请参阅here。
答案 1 :(得分:5)
另一种创造连续脉冲圈的选择: