2006.05.22 株式会社四次元データ 藤本将光
前章では、SVG画像上でデータを取得し、html上にデータを表示するサンプルを説明しました。本章では、SVG画像上でデータを取得し、その取得したデータをSVG画像内に表示させるサンプルを解説します。
実際のサンプルを見てみましょう。
まず、赤色の正方形の上にマウスを乗せ、その後に、青色の正方形の上にマウスを乗せてみてください。
青色の正方形の上に表示されている「4DD Group」の文字が「4DD Company」に変化します。
この例では、SVG内の赤い四角形にマウスが乗っているときに、非同期通信で添付したテキストファイルからデータを取得し、青い四角形にマウスが乗ったときに、SVG画像内にデータを表示させています。
では、サンプルのソースを見てみましょう。
このサンプルでは、2章のサンプルと同様に、SVGファイルは単独の文書として作成し、作成したファイルをembedタグを利用してhtmlファイルに組み込んでいます。
以下に、サンプルのhtmlファイル、SVGファイルのソースを示します。
<head> <script language="JavaScript"> <!-- function createHttpRequest() ・・・XMLHttpRequestオブジェクト生成 { if(window.ActiveXObject) ・・・Win e4,e5,e6用 { try { return new ActiveXObject("Msxml2.XMLHTTP") ; } catch (e) { try { return new ActiveXObject("Microsoft.XMLHTTP"); } catch (e2) { return null ; } } } else if(window.XMLHttpRequest) ・・・Win Mac Linux m1,f1,o8 Mac s1 Linux k3用 { return new XMLHttpRequest() ; } else { return null ; } } function getData(pageURL) ・・・(1) { oj = createHttpRequest(); if (oj) { oj.onreadystatechange = setPageData; oj.open('GET', pageURL,true); oj.send(null); }else{ alert("XMLHttpRequest失敗"); } } var restext; function setPageData() { if (oj.readyState == 4 ) { restext = oj.responseText; } } function writeText(evt) ・・・(2) { var text = evt.getTarget().getOwnerDocument.getElementById("mytext2"); text.getFirstChild().setData(restext) ; } //--> </script> </head> <embed src="sample3.svg" height="300" width="500" name="theSVG">
<svg xml:space="preserve" width="500" height="300" > <rect id="bg" x="0" y="0" width="3000" height="2500" fill="yellow"/> <rect id="rect" x="100" y="150" width="50" height="50" fill="red" onmouseover="getData('test.txt')"/> ・・・(3) <rect id="rect1" x="300" y="150" width="50" height="50" fill="blue" onmouseover="writeText(evt)"/> ・・・(4) <text x="250" y="130" id="mytext2" style="visibility: visible; fill: black; font-family: Serif; font-size: 24">4DD group</text> ・・・(5) </svg>
これまでのサンプルと同様に、このサンプルにおいても(1)において非同期通信の設定をしています。
(2)では、取得したテキストデータをSVG画像上に表示させる設定を指定を行っています。このwriteText関数では、DOMを利用することによって、(5)の部分で表示されているID:mytext3のSVGドキュメントを取得し、非同期通信によって受信したテキストデータを取得したSVGドキュメントのテキストノードに与えている。
具体的には、以下のDOMを使用しています。
このサンプルにおいても前章のサンプルと同様に、(3)、(4)において、(1)、(2)で記述した関数をイベント関数として与えています。