2013-06-15 4 views
5

D3.jsで継続的にトランジションを実行できますか?D3.js:継続的にトランジションを実行しますか?

たとえば、bodyの色を赤から青に変更して、もう一度元に戻したいとします(これは恐ろしいことですが、それに伴います)。

これは、私は一度それを行うだろうかです:

d3.select("body").transition().duration(1000).style("background-color", "red"); 

私は継続的にそれを行うだろうか?

私が見た最も近い例はd3.timerですが、これを行うより良い方法があるかどうかはわかりません。

答えて

5

transition.each()と「終了」イベントを使用できます。コードは次のようになります。

function myTrans() { 
    d3.select("body").transition().duration(1000).style("background-color", "red") 
     .each("end", function() { 
     d3.select(this).transition().duration(1000).style("background-color", "blue") 
      .each("end", function() { myTrans(); }); 
     }); 
} 
+4

これは素晴らしいです、ありがとうございました。私はちょっと神経質になって、最終的にはブラウザがクラッシュするかもしれないが、徐々にメモリが増えていくだろうか? – Richard

+0

@Richardこれは(自身を呼び出すとき)再帰関数です。したがって、スタックサイズがあるしきい値を超えているというエラーがスローされます。 – SumNeuron

+0

@SumNeuronそれ自身を再帰的に呼び出すが、非同期的に呼び出すので、呼び出しスタックサイズのエラーは発生しません。 – jessepinho

1

function myTrans() { 
    d3.select("body").transition().duration(1000).style("background-color", "red") 
     .on("end", function() { 
     d3.select(this).transition().duration(1000).style("background-color", "blue") 
      .on("end", function() { myTrans(); }); 
     }); 
} 
関連する問題