gne*_*eek 4 javascript svg d3.js
我想知道我的所有行何时被删除,以便我可以调用另一个函数。
svg.selectAll('line').transition().duration(2500)
.style("stroke-opacity",0).remove();
Run Code Online (Sandbox Code Playgroud)
我知道我可以在每次转换后使用 .each("end",mycallback) 运行回调,但我只想在所有转换完成后运行一次。
如果我试试这个
svg.selectAll('line').transition().duration(2500)
.style("stroke-opacity",0).remove().call(function(){console.log("yes");});
Run Code Online (Sandbox Code Playgroud)
然后 .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");
}
}
Run Code Online (Sandbox Code Playgroud)
在这里完成演示。请注意,在第一组完成后要运行另一个转换的特殊情况下,您可以.transition()再次使用。
| 归档时间: |
|
| 查看次数: |
1676 次 |
| 最近记录: |