Webアプリ開発エンジニアのための技術情報サイト「テックスコア」

3. AjaxとSVGの組み合わせ2

2006.05.22 株式会社四次元データ 藤本将光

前章では、SVG画像上でデータを取得し、html上にデータを表示するサンプルを説明しました。
本章では、SVG画像上でデータを取得し、その取得したデータをSVG画像内に表示させるサンプルを解説します。

3.1. サンプル2

実際のサンプルを見てみましょう。


まず、赤色の正方形の上にマウスを乗せ、その後に、青色の正方形の上にマウスを乗せてみてください。

青色の正方形の上に表示されている「4DD Group」の文字が「4DD Company」に変化します。

この例では、SVG内の赤い四角形にマウスが乗っているときに、非同期通信で添付したテキストファイルからデータを取得し、青い四角形にマウスが乗ったときに、SVG画像内にデータを表示させています。

では、サンプルのソースを見てみましょう。

3.2. サンプル2のソース

このサンプルでは、2章のサンプルと同様に、SVGファイルは単独の文書として作成し、作成したファイルをembedタグを利用してhtmlファイルに組み込んでいます。

以下に、サンプルのhtmlファイル、SVGファイルのソースを示します。

3.2.1. htmlファイルのソース

<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">

3.2.2. SVGファイルのソース

<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を使用しています。

  • getTarget();イベントのターゲットを指定する
  • getElementById();id属性を指定し、特定の要素を取得する
  • getFirstchild();オブジェクトの子ノードを取得する
  • setData();オブジェクトに指定したフォーマットのデータを設定する

このサンプルにおいても前章のサンプルと同様に、(3)、(4)において、(1)、(2)で記述した関数をイベント関数として与えています。



前のページへ TECHSCOREのTOPページへ  
techscore(トップページへ)
TECHSCORE書店
TECHSCOREトップページJavaSQLXMLリッチクライアントモデリングセマンティックWebその他技術Tuigwaa