延迟到下一个数据项,一个一个追加,一次又一次
Delay to the next data item, appending one by one, time after time
我只需要延迟圆圈(一个一个出现),但是这个delay()
被忽略了。
D3_svg.selectAll().data(lst).enter().append("circle")
.attr('cx', d => d.x).attr('cy', d => d.y) // position
.attr("r", 10).style("fill","red") // layout
.transition().delay(2000) // time to the next
有很多复杂的建议(),使用定时器等我要最简单的。
虽然可以从字面上按顺序 append 元素,但有延迟,必要的代码对于 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>
我只需要延迟圆圈(一个一个出现),但是这个delay()
被忽略了。
D3_svg.selectAll().data(lst).enter().append("circle")
.attr('cx', d => d.x).attr('cy', d => d.y) // position
.attr("r", 10).style("fill","red") // layout
.transition().delay(2000) // time to the next
有很多复杂的建议(
虽然可以从字面上按顺序 append 元素,但有延迟,必要的代码对于 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>