使用d3过渡增加和减少圆的半径

ada*_*mcc 9 javascript geometry transitions d3.js

我试图通过增加和减少其半径来在圆上创建脉冲效果.我希望圆圈能够根据给定的数据集增长和缩小.我只能获得过渡功能以增加或减少半径而不是两者.

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");
Run Code Online (Sandbox Code Playgroud)

Lar*_*off 12

这并不适合一般的D3数据/输入/更新/退出模式,因为您不是控制多个DOM元素,而是更改单个元素的属性.但是,您可以使用循环添加指定的过渡,轻松完成此操作.代码看起来像这样.

dataset.forEach(function(d, i) {
    circle.transition().duration(duration).delay(i * duration)
        .attr("r", d);
});
Run Code Online (Sandbox Code Playgroud)

有关完整示例,请参见此处.


hie*_*ter 5

另一种创建连续脉冲圆的选项:

http://bl.ocks.org/chiester/11267307

  • 虽然此链接可能会回答这个问题,但最好包括答案的基本部分[此处](http://meta.stackoverflow.com/a/8259)并提供链接以供参考.如果链接的页面发生更改,则仅链接的答案可能会无效. (7认同)