1

標準の SVG ペン マークアップ (「M 130 30」、「L 132、40」など) で定義された非常に複雑なパスがあります。ここで説明されているように、パス全体をゆっくりと描画できるように、このマークアップを使用してパスを作成するにはどうすればよいですか?: D3 でゆっくりとパスを描画することはできません

4

1 に答える 1

4

その質問のデュオピクセルの回答にリストされているアプローチは、<path>アニメーション化するノードがD3によって生成されなかった場合でも機能します。以下は、既存の SVG パス ノードを使用したduopixel のコードの修正版です。

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
</head>
<body>
    <svg xmlns="http://www.w3.org/2000/svg" id="visualization" height="300" width="700">
        <path id="existingLine" fill="none" stroke-width="2" stroke="steelblue" 
        d="M0,45.355864964297126Q56,93.30709264413157,70,101.42710214950955C91,113.60711640757651,119,112.60236634997189,140,126.5559600180769S189.00000000000003,192.28891292428457,210.00000000000003,194.45105993687628S259,143.07483109253366,280,140.97027343535498S329,190.98168538928422,350,180.42067555568514S399.00000000000006,58.614334097794526,420.00000000000006,70.56354121136098S469.00000000000006,240.5996349725512,490.00000000000006,260.08205631279486S539,201.70472761196623,560,200.44635014631868S609,277.9853193478483,630,251.69287320847783Q644,234.16457578223088,700,25.163375883849042">
        </path>
    </svg>
  <script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
  <script type="text/javascript">
    // select the already-existing path node via its ID.
    var path = d3.select("#existingLine");

    // from here forward the code is exactly like the original....
    var totalLength = path.node().getTotalLength();

    path
      .attr("stroke-dasharray", totalLength + " " + totalLength)
      .attr("stroke-dashoffset", totalLength)
      .transition()
        .duration(2000)
        .ease("linear")
        .attr("stroke-dashoffset", 0);

  </script>
</body>
</html>

または、ノードの作成に D3 を使用する場合は、既存のパス文字列を関数呼び出しの代わりに使用します。line()繰り返しますが、デュオピクセルのコードを適応させます:

var path = svg.append("path")
  .attr("d", "M 130 30", "L 132, 40") // and so on
  .attr("stroke", "steelblue")
  .attr("stroke-width", "2")
  .attr("fill", "none");
于 2013-07-06T02:28:42.100 に答える