1 回答
![?](http://img1.sycdn.imooc.com/545850200001359c02200220-100-100.jpg)
TA贡献1943条经验 获得超7个赞
虽然可以逐字地按顺序附加元素,但有延迟,必要的代码对于 D3 来说太麻烦了,而且你最终会向后弯腰:在我看来,你想要的只是元素出现在屏幕依次,一个一个。它们可以同时附加。
在这种情况下,我们将使用一个简单的selection.transition. 但是,我们需要转换一些属性:不能将不存在转换为存在,这是没有意义的。
使元素显示在屏幕中的最简单方法是转换其不透明度。对于延迟,采用元素索引(第二个参数)的函数就足够了。例如,每 1 秒一个元素:
.delay(function (_,i){
return i * 1000
});
这是一个基本的演示:
d3.select("svg").selectAll(null)
.data(d3.range(50).map(() => [Math.random() * 300, Math.random() * 150]))
.enter()
.append("circle")
.attr("r", 5)
.style("fill", "teal")
.style("stroke", "white")
.attr("cx", d => d[0])
.attr("cy", d => d[1])
.style("opacity", 0)
.transition()
.duration(0)
.delay(function(_, i) {
return i * 200
})
.style("opacity", 1)
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
<svg></svg>
添加回答
举报