D3.js-アニメーション

D3.jsは、トランジションによるアニメーションをサポートしています。トランジションを適切に使用してアニメーションを作成できます。トランジションは限定された形式ですKey Frame Animation開始と終了の2つのキーフレームのみ。開始キーフレームは通常、DOMの現在の状態であり、終了キーフレームは、指定した属性、スタイル、およびその他のプロパティのセットです。トランジションは、開始ビューに依存する複雑なコードなしで、新しいビューにトランジションするのに適しています。

Example −「transition_color.html」ページの次のコードについて考えてみましょう。

<!DOCTYPE html>
<html>
   <head>
      <script type = "text/javascript" src = "https://d3js.org/d3.v4.min.js"></script>
   </head>

   <body>
      <h3>Simple transitions</h3>
      <script>
         d3.select("body").style("background-color", "lightblue") 
         // make the background-color lightblue.transition()
         .style("background-color", "gray");
         // make the background-color gray
      </script>
   </body>
</html>

ここで、ドキュメントの背景色が白からライトグレー、そしてグレーに変わりました。

duration()メソッド

duration()メソッドを使用すると、プロパティの変更を瞬時にではなく、指定した期間にわたってスムーズに行うことができます。次のコードを使用して、5秒かかる遷移を作成しましょう。

<!DOCTYPE html>
<html>
   <head>
      <script type = "text/javascript" src = "https://d3js.org/d3.v4.min.js"></script>
   </head>

   <body>
      <h3>Simple transitions</h3>
      <script>
         d3.selectAll("h3").transition().style("color","green").duration(5000);
      </script>
   </body>
</html>

ここでは、遷移がスムーズかつ均等に発生しました。次の方法を使用して、RGBカラーコード値を直接割り当てることもできます。

d3.selectAll("h3").transition().style("color","rgb(0,150,120)").duration(5000);

これで、各色番号はゆっくり、スムーズ、そして均等に0から150になります。開始フレーム値から終了フレーム値までの中間フレームを正確にブレンドするために、D3.jsは内部補間メソッドを使用します。構文は以下のとおりです-

d3.interpolate(a, b)

D3は、次の補間タイプもサポートします-

  • interpolateNumber −数値をサポートします。

  • interpolateRgb −サポートカラー。

  • interpolateString −サポート文字列。

D3.jsは、適切な補間メソッドの使用を処理します。高度なケースでは、補間メソッドを直接使用して、目的の結果を得ることができます。必要に応じて、新しい内挿法を作成することもできます。

delay()メソッド

delay()メソッドを使用すると、一定期間後に遷移を実行できます。「transition_delay.html」の次のコードについて考えてみます。

<!DOCTYPE html>
<html>
   <head>
      <script type = "text/javascript" src = "https://d3js.org/d3.v4.min.js"></script>
   </head>

   <body>
      <h3> Simple transitions </h3>
      <script>
         d3.selectAll("h3").transition()
            .style("font-size","28px").delay(2000).duration(2000);
      </script>
   </body>
</html>

移行のライフサイクル

移行には4段階のライフサイクルがあります-

  • 移行が予定されています。
  • 移行が始まります。
  • 遷移が実行されます。
  • 移行は終了します。

これらを1つずつ詳しく見ていきましょう。

移行が予定されています

トランジションは、作成時にスケジュールされます。電話するときselection.transition、移行をスケジュールしています。これは私たちが呼ぶときでもありますattr(), style() およびその他の遷移方法を使用して、終了キーフレームを定義します。

移行が始まります

遷移は、遷移がスケジュールされたときに指定された遅延に基づいて開始されます。遅延が指定されていない場合、遷移はできるだけ早く開始されます。これは通常、数ミリ秒後です。

遷移に遅延がある場合、開始値は遷移の開始時にのみ設定する必要があります。開始イベントを聞くことでこれを行うことができます-

d3.select("body")
   .transition()
   .delay(200)
   .each("start", function() { d3.select(this).style("color", "green"); })
   .style("color", "red");

トランジションラン

遷移が実行されると、0から1の範囲の遷移の値で繰り返し呼び出されます。遅延と期間に加えて、遷移はタイミングの制御を容易にします。緩和すると、スローインやスローアウトなどの時間が歪められます。一部のイージング関数は、一時的に1より大きいまたは0より小さいtの値を与える場合があります。

移行は終了します

遷移の終了時間は常に正確に1であるため、遷移が終了したときに終了値が正確に設定されます。遷移は、遅延と期間の合計に基づいて終了します。遷移が終了すると、終了イベントがディスパッチされます。