d3.js中的转换队列;一个接一个

问题描述:

我试着在d3.js中做链式转换。为此,我在数组中定义一组转换并尝试使用.each("end", function())递归调用函数,以在前一个完成时开始转换,但是我还没有结果。的动作d3.js中的转换队列;一个接一个

animations = [ function(){ console.log(1); return circle.transition().duration(2e3).attr("cy", Math.random()*300); } , 
        function(){ console.log(2); return rect.transition().duration(3e3).attr("fill", "#"+((1<<24)*Math.random()|0).toString(16)); }, 
        function(){ console.log(3); return circle.transition().duration(1e3).attr("r", Math.random()*500); }, 
        function(){ console.log(4); return circle.transition().duration(2e3).style("fill", "#"+((1<<24)*Math.random()|0).toString(16)); }, 
        function(){ console.log(5); return circle.transition().duration(1e3).attr("cx", Math.random()*500); }] 

递归函数

function animate(index){ 
     if(index < animations.length - 1){ 
      index = index + 1 
      return animations[index]().each("end", animate(index)) 
     } else { 
      return true 
     } 
    } 

的的jsfiddle是herethis

列表是使用recusive函数的例子。

谢谢大家提前。

你快到了!

而不是

return animations[index]().each("end", animate(index)) 

你需要

return animations[index]().each("end", function() { animate(index) }) 

updated jsFiddle

+0

呀,真险!数组中的元素是如何工作的我不认为我需要在每个元素的参数中明确指定一个函数。再次,谢谢! – jbkunst

+0

@ user829971乐意帮忙!为什么不接受这个答案,然后(或upvote)?这是麻辣花生:) – meetamit

+1

对不起!我不能冒出来,我没有足够的声誉。 – jbkunst