我正在应用转换到返回的一组节点selectAll().我认为结束事件将在所有转换完成后触发,但each("end",function)在每次转换结束时调用.
那么有没有办法设置一个在所有选定节点完成转换后调用的回调?
我应该用call它吗?但我不认为它在文档中的任何地方都用作结束回调.
我也可以在each回调中运行一个计数器.但有没有办法知道还有多少节点尚待完成转换?或所选节点组中当前节点的索引?
我在链中有两个select()调用,selectAll('.partition').selectAll('.subpartition')
因此传递给每个回调的索引参数将旋转n次.
pay*_*ne8 10
据我所知,没有一种内置的方法可以知道一个小组的最后一次转换何时结束,但是有很多方法可以解决它.我多次使用的一种方法是保持已完成的转换计数.
var n = 0;
d3.selectAll('div')
.each(function() { // I believe you could do this with .on('start', cb) but I haven't tested it
n++;
})
.transition()
.on('end', function() { // use to be .each('end', function(){})
n--;
if (!n) {
endall();
}
})
function endall() {
// your end function here
}
Run Code Online (Sandbox Code Playgroud)
以下是相关文档的链接:
小智 1
我遇到过同样的问题
每个元素都会执行回调
我已经解决了使用下划线一次方法
d3.select("#myid")
.transition()
.style("opacity","0")
.each("end", _.once(myCallback) );
Run Code Online (Sandbox Code Playgroud)