我想知道我的所有行何时被删除,以便我可以调用另一个函数。
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(),但是有正确的方法吗?
正确的方法是使用.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 http://jsfiddle.net/N8Fd8/。请注意,在特殊情况下,当您想要在第一组完成后运行另一个转换时,您可以仅使用.transition()
again.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)