2014年9月9日火曜日

地図やマーカークリックでのinfowindowの制御


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 件のコメント:

コメントを投稿