1. ホーム
  2. javascript

Google Maps API v3 ですべてのインフォウィンドウを閉じる

2023-12-30 02:24:12

質問

私は、自分のウェブサイト上に複数のマーカーを持つGoogleマップキャンバスを作成するスクリプトで忙しいです。私は、あなたがマーカーをクリックしたときに、インフォウィンドウが開くようにしたい。私はそれをやりました、そしてコードは現時点であります。

 var latlng = new google.maps.LatLng(-34.397, 150.644);
    var myOptions = {
      zoom: 8,
      center: latlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
    function addMarker(map, address, title) {
     geocoder = new google.maps.Geocoder();
     geocoder.geocode( { 'address': address}, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
          map.setCenter(results[0].geometry.location);
          var marker = new google.maps.Marker({
     position: results[0].geometry.location,
              map: map,
              title:title
    });
    google.maps.event.addListener(marker, 'click', function() {
     var infowindow = new google.maps.InfoWindow();
            infowindow.setContent('<strong>'+title + '</strong><br />' + address);
             infowindow.open(map, marker);

          });
        } else {
          alert("Geocode was not successful for the following reason: " + status);
        }
     });
    }
    addMarker(map, 'Address', 'Title');
 addMarker(map, 'Address', 'Title');

これは100%動作します。しかし、私は今、1つのinfowindowが開いていて、2つ目を開きたいとき、最初の1つが自動的に閉じるようにしたい。しかし、私はそれを行う方法を見つけていない。infowindow.close();は助けにならない。誰かこの問題に対する例または解決策を持っていますか?

どのように解決するには?

infowindowはローカル変数であり、close()の時点ではウィンドウは使用できません。

var latlng = new google.maps.LatLng(-34.397, 150.644);
var infowindow = null;

...

google.maps.event.addListener(marker, 'click', function() {
    if (infowindow) {
        infowindow.close();
    }
    infowindow = new google.maps.InfoWindow();
    ...
});
...