2012年4月24日火曜日

htmlにjavascriptでsvg要素を追加する方法

javascriptを使って動的にsvg要素を追加する方法としては次の2つの方法が考えられる.
  1. svgElementオブジェクトを生成し,htmlElementにappendChildする.
    素朴な記述法で,コードが長くなりがち.svgの内容を後から操作する必要があるなら,domオブジェクトを保持できるこちらのほうが便利だ.
  2. svgのソースコードを生成し,innerHTMLに挿入する.
    svg要素全体をテキストとして記述してしまうのがミソ.svgを作りきった後何もしないのであれば,svg要素の構造が見通しやすいこちらがお勧め.
いずれも一長一短あるので, 使い分けると良いだろう.
なお,svg要素の中身を取り出したい場合は,svg要素を含んでいるhtml要素のinnerHTMLを参照し,そこから<svg>〜</svg>の範囲を切り出すと良い.


<!DOCTYPE html>
<html>
 <head>
 <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
 <script type="text/javascript">

window.onload = function(){
        //1の方法
 var NS = "http://www.w3.org/2000/svg";
 var svg = document.createElementNS(NS, "svg");
 svg.setAttribute("viewBox", "0 0 200 200");
 svg.style.width = "150px";
 svg.style.width = "150px";
 var path = document.createElementNS(NS, "path");
 path.setAttribute("d", "M 0 0 h 200 v 200 h -200 z");
 path.setAttribute("fill", "red");
 svg.appendChild(path);
 document.body.appendChild(svg);
        
        //2の方法
 document.body.innerHTML 
  += '<svg width="150px" height="150px" viewBox="0 0 200 200">'
  + '<path d="M 0 0 h 200 v 200 h -200 z" fill="blue"/>'
  + '</svg>';
};

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

0 件のコメント:

コメントを投稿