Хотя можно буквально добавлять элементы последовательно, с задержкой, необходимый код будет слишком громоздким для 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>