关闭Google Maps API v3中的所有信息窗口

Tom*_*Tom 67 javascript google-maps-api-3

我正在忙着一个脚本,它会在我的网站上制作一个带有多个标记的谷歌地图画布.我希望当你点击一个标记时,会打开一个信息窗口.我已经这样做了,代码就是这样:

 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');
Run Code Online (Sandbox Code Playgroud)

这100%工作.但是现在我希望当一个infowindow打开,并且你想打开第二个时,第一个自动关闭.但我还没有办法做到这一点.infowindow.close(); 没有用.有人为这个问题做出示例或解决方案吗?

小智 146

infowindow是局部变量,窗口​​在关闭时不可用()

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();
    ...
});
...
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你.我将代码从多个InfoWindows更改为只有一个在每个marker.click上关闭/打开的代码.奇迹般有效. (7认同)

raj*_*est 14

声明全局变量:

var mapOptions;
var map;
var infowindow;
var marker;
var contentString;
var image;
Run Code Online (Sandbox Code Playgroud)

intialize使用地图的addEvent方法:

google.maps.event.addListener(map, 'click', function() {
    if (infowindow) {
        infowindow.close();
    }
});
Run Code Online (Sandbox Code Playgroud)


Bin*_*nod 6

对于infowindows动态创建的循环,声明一个全局变量

var openwindow;

然后在addListener函数调用中(在循环内):

google.maps.event.addListener(marker<?php echo $id; ?>, 'click', function() {
if(openwindow){
    eval(openwindow).close();
}
openwindow="myInfoWindow<?php echo $id; ?>";
myInfoWindow<?php echo $id; ?>.open(map, marker<?php echo $id; ?>);
});
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

103507 次

最近记录:

8 年,3 月 前