イベントリスナーの登録

広告

地図やマーカーなどで発生するイベントを取得するにはイベントリスナーの登録を行います。登録を行うにはGEventクラスの静的メソッドであるaddListenerメソッドを使います。

ソース オブジェクト上のカスタム イベントのイベント ハンドラを登録しま
す。最終的にハンドラを登録解除するために使用できるハンドルを返します。
イベント ハンドラは、this セットとともにソース オブジェクトに呼び出さ
れます。

戻り値:
  GEventListener

1番目の引数には対象となるオブジェクトを指定します。地図そのものであればGMap2クラスのオブジェクト、マーカーであればGMarkerクラスのオブジェクトなどを指定します。2番目の引数には取得する対象のイベントを文字列で指定します。3番目の引数にはイベントハンドラ(イベントハンドラとはイベントが発生した時に処理を行う関数のことです)を表す関数リテラルを指定します。

関数リテラルには、イベント毎に異なった引数が渡されてきます。詳しくは各イベント毎の解説をご覧下さい。

このメソッドを実行すると戻り値としてGEventListenerクラスのオブジェクトを取得します。このオブジェクトは後から登録したイベントリスナーを削除する場合に使用されます。

実際には次のように記述します。

var map = new GMap2(document.getElementById("map"));
map.setCenter(new GLatLng(35.172304,136.908306), 15);

GEvent.addListener(map, "click", clickAction);

function clickAction(overlay, latlng, overlaylatlng){
  ....
}

上記では地図上をソースとし、イベントの種類は"click"が発生した時にclickAction関数が呼び出されるように設定しています。

サンプルプログラム

では試してみます。

code1_1.js

var map;

function initialize() {
  if (GBrowserIsCompatible()) {
    map = new GMap2(document.getElementById("map_canvas"));
    map.setCenter(new GLatLng(40.464581,140.882835), 11);

    GEvent.addListener(map, "click", clickAction);
  }
}

function clickAction(overlay, latlng, overlaylatlng){
  map.addOverlay(new GMarker(latlng));
}

map1_1.html

<!DOCTYPE html "-//W3C//DTD XHTML 1.0 Strict//EN" 
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
    <title>サンプル:イベントリスナーの登録</title>
    <script src="http://maps.google.com/maps?file=api&v=2&key=(key)&sensor=false"
            type="text/javascript" charset="utf-8"></script>
    <script src="./js/code1_1.js" type="text/javascript"></script>
  </head>
  <body onload="initialize()" onunload="GUnload()">
    <div id="map_canvas" style="width: 400px; height: 400px"></div>
  </body>
</html>

ではブラウザで上記のURLを見てみます。

p1-1

今回は地図上でクリックを行うと、その位置にマーカーを設置するようにしています。

p1-2

p1-3

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。