4-1:最後にクリックされたマーカーを別のマーカーにする
|
|
マーカーがクリックされたら、別のマーカーにするサンプルプログラム |
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
if (GBrowserIsCompatible()) { //====================================// // 地図のポイント // //====================================// var pointA = new GLatLng(35.6550, 139.7540); var pointB = new GLatLng(35.6560, 139.7550); var pointC = new GLatLng(35.6570, 139.7560); var pointD = new GLatLng(35.6580, 139.7570); //====================================// // 地図を作成 // //====================================// map = new GMap2(document.getElementById("map")); map.setCenter(pointC, 17); //====================================// // マーカーを作成 & 追加 // //====================================// //マーカーA (デフォルトは非表示にする) markerA=activeMarker(pointA); map.addOverlay(markerA); markerA.hide(); //マーカーB var markerB=createMarker(pointB, "markerB.png"); map.addOverlay(markerB); //マーカーC var markerC=createMarker(pointC, "markerC.png"); map.addOverlay(markerC); //マーカーD var markerD=createMarker(pointD, "markerD.png"); map.addOverlay(markerD);
} function createMarker(_point, iconfile){ var _icon = new GIcon(); _icon.image = "http://googlemaps.googlermania.com/img/" + iconfile; _icon.shadow = "http://googlemaps.googlermania.com/img/shadow.png"; _icon.iconSize = new GSize(20, 34); _icon.shadowSize = new GSize(37, 34); _icon.iconAnchor = new GPoint(9, 34); _icon.infoWindowAnchor = new GPoint(9, 2); _icon.infoShadowAnchor = new GPoint(18, 25); var marker = new GMarker(_point, _icon); return marker; } function activeMarker(_point){ var _icon = new GIcon(); _icon.image = "http://googlemaps.googlermania.com/img/marker_flag.png"; _icon.shadow = "http://googlemaps.googlermania.com/img/marker_shadow.png"; _icon.iconSize = new GSize(35, 35); _icon.shadowSize = new GSize(35, 35); _icon.iconAnchor = new GPoint(0, 35); _icon.infoWindowAnchor = new GPoint(18, 11); var marker = new GMarker(_point, _icon ); return marker; }
</script> </head> <body onload="load()" onunload="GUnload()"> <div id="map" style="width: 500px; height: 500px"></div> </body> </html> |
サンプルプログラムの解説
|
|
|||
最後に青枠で囲まれた部分ですが、ここではマーカーがクリックされたときの処理を行っています。 実際に何をしているのかは、各行のコメントを読んでいただければ分かると思います。 ここで問題なのは、 //infowindowだったら、何もしない という部分です。 なぜそんなことをしているのかというと、それは地図全体にイベントリスナーを登録したからです。 どうゆうことかというと、 markerA.openInfoWindowHtml("<b>マーカーA</b>"); の部分で、infoWindowオブジェクト(ふきだし)を表示しています。 これによって、ユーザがinfoWindowをクリックしたときに、この_markerController関数が呼ばれてしまうのです。 なのでoverlayがinfoWindowかどうかで判断して、markerでなければ処理しないようにしています。 |




