我想知道我的所有线路何时被删除,以便我可以调用另一个功能。
svg.selectAll('line').transition().duration(2500)
.style("stroke-opacity",0).remove();
我知道我可以在每次转换后使用.each(" end",mycallback)运行回调,但我只想在完成所有转换后运行一次。
如果我试试这个
svg.selectAll('line').transition().duration(2500)
.style("stroke-opacity",0).remove().call(function(){console.log("yes");});
然后.call()在转换完成之前发生。
我可以添加一个window.setTimeout(),但有没有正确的方法呢?
答案 0 :(得分:3)
正确的方法是使用.each("end", callback)
。正如您所指出的,对于转换中的每个元素,都会调用一次。您无法更改此设置,但您可以添加一个计数器来跟踪已删除的元素数量:
d3.selectAll("div")
.call(setupRemove)
.transition().duration(500)
.each("end", onRemove)
.remove();
function setupRemove(sel) {
counter = sel.size();
}
function onRemove() {
counter--;
if(counter == 0) {
console.log("all done");
}
}
完整演示here。请注意,在特殊情况下,当您想要在第一个设置完成时运行另一个转换时,您可以再次使用.transition()
。