4

Javascript を使用して SVG グリッドの描画に取り組んでいます。軸と象限ラベルを描画することができました。ただし、動的ポイントを追加する際に問題が発生しました。

SVG 要素の onload イベントでポイントを描画しようとしています。Firebug を使用すると、ポイントを表す円要素が SVG DOM に追加され、位置、ブラシ ストロークなどの正しい属性が設定されていることを確認できました。

残念ながら、私のブラウザ (Firefox 3) でレンダリングされた実際の画像は、これらの新しい DOM 要素を追加したという事実を反映して更新されません!

以下は、要素を正しい DOM ノードに追加するために使用するコードです。

function drawPoints()
  {
    var points = pointCollection.points;
    var grid = SVGDoc.getElementById("gridGroup");

    for(var i = 0 in points)
    {
        var x = points[i].x;
        var y = points[i].y;
        var label = points[i].event;

        //<circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red"/>

        var dot = SVGDoc.createElement("circle");
        dot.setAttribute("cx", x);
        dot.setAttribute("cy", y);
        dot.setAttribute("r", 15);
        dot.setAttribute("stroke", "red");
        dot.setAttribute("stroke-width", "2");
        dot.setAttribute("fill", "black");

        grid.appendChild(dot);
    }
  }

その後、Firefox の Firebug デバッグ拡張機能によって示される SVG 構造は次のとおりです。

<svg width="800" height="800" version="1.1" xmlns="http://www.w3.org/2000/svg" onload="init(evt); drawAxis(); drawPoints()">
  <g id="gridGroup" stroke="green">
    <line id="xAxis" x1="0" x2="800" y1="400" y2="400" stroke-width="2"/>
    <line id="yAxis" x1="400" x2="400" y1="0" y2="800" stroke-width="2"/>
    <text id="importantLabel" x="155" y="20" font-family="Verdana" font-size="18" fill="blue" onclick="drawPoints()">Important</text>
    <text id="notImportantLabel" x="555" y="20" font-family="Verdana" font-size="18" fill="blue">Not-Important</text>
    <text id="urgentLabel" x="20" y="200" font-family="Verdana" font-size="18" fill="blue" transform="rotate(-90, 20, 200)">Urgent</text>
    <text id="notUrgentLabel" x="20" y="600" font-family="Verdana" font-size="18" fill="blue" transform="rotate(-90, 20, 600)">Not-Urgent</text>

    <circle cx="30" cy="30" r="15" stroke="red" stroke-width="2" fill="black"/>
    <circle cx="600" cy="600" r="15" stroke="red" stroke-width="2" fill="black"/>
    <circle cx="400" cy="400" r="15" stroke="red" stroke-width="2" fill="black"/>
  </g>
</svg>

どんな助けでも大歓迎です、私は完全なSVG初心者です!

4

1 に答える 1

5

SVG 要素を動的に作成するにはcreateElementNS、適切な名前空間でメソッドを使用する必要があります。

var dot = SVGDoc.createElementNS("http://www.w3.org/2000/svg", "circle");

詳細については、Kevin Lindsay によるチュートリアル、特にここを参照してください。

于 2008-11-05T00:34:05.020 に答える