google maps api v2の頃のように、
地図やマーカーをクリックすることで
infowindowの表示を制御したいと思います。
google maps api v2の頃は
地図をクリックしたり、
他のマーカーをクリックすると、
開いていたinfowindowは閉じました。
しかし、v3になってからは
自分できちんと閉じてあげないと
infowindowは閉じれくれなくなりました。
そこでv2の頃のような動作を行うコードを書いてみました。
サンプルではマーカーをクリックするとinfowindowが開いて、
その後、地図や他のマーカーをクリックすると
開いていたinfowindowは閉じられます。
ポイントは16行目の
var infowindow = new google.maps.InfoWindow();でinfowindowを作成し、
その変数を使いますと言うことです。
infowindowを開く時は
27、41行目のように
infowindow.open(gmap, this);し、
閉じる時は49行目のように
infowindow.close();することで一つのinfowindowを表示する位置・内容を変えながら、
開いたり閉じたりする仕組みです。
以下サンプルです。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8" /> <title>google maps api v3</title> <script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> <script type="text/javascript"> google.maps.event.addDomListener(window, "load", function () { var map = document.getElementById("map_canvas"); var latlng = new google.maps.LatLng(35.6585, 139.7454); var mapOptions = { zoom: 10, center: latlng }; var gmap = new google.maps.Map(map, mapOptions); var infowindow = new google.maps.InfoWindow(); // --------------------------------------------- // marker A(東京タワー) var marker_A = new google.maps.Marker({ map: gmap, position: { lat: 35.6585, lng: 139.7454 } }); google.maps.event.addListener(marker_A, "click", function (e) { infowindow.setPosition(e.latLng); infowindow.setContent("東京タワー"); infowindow.open(gmap, this); // 下記のように設定しても同じです //infowindow.open(gmap, marker_A); }); // --------------------------------------------- // marker B(スカイツリー) var marker_B = new google.maps.Marker({ map: gmap, position: { lat: 35.7100, lng: 139.8107 } }); google.maps.event.addListener(marker_B, "click", function (e) { infowindow.setPosition(e.latLng); infowindow.setContent("スカイツリー"); infowindow.open(gmap, this); // 下記のように設定しても同じです //infowindow.open(gmap, marker_B); }); // --------------------------------------------- // 地図クリックイベント google.maps.event.addDomListener(gmap, "click", function () { infowindow.close(); }); }); </script> </head> <body> <div id="map_canvas" style="width: 400px; height: 400px"></div> </body> </html>
0 件のコメント:
コメントを投稿