1

这个问题与谷歌地图 API v3 中的信息窗口有关。

目前我循环这个函数并放置标记..

function addPostCode(zip, html) 
{
   geocoder.geocode( { 'address': zip}, function(results, status) 
   {
      if (status == google.maps.GeocoderStatus.OK)
      {
         map.setCenter(results[0].geometry.location);
         var marker = new google.maps.Marker({
         map: map,
         position: results[0].geometry.location,
         name: zip
      });
});

现在我想添加一个具有独特 HTML 的信息窗口,但是我想要以下行为..

当信息窗口被事件打开时,任何当前的信息窗口都将关闭,只留下新的信息窗口。

这可能吗?我该怎么做?事实证明,很难找到有关此问题的文档。

4

4 回答 4

3

在初始化中创建一个信息窗口。在要打开信息窗口的事件/侦听器中,您需要设置内容并在地图上的标记/位置上打开信息窗口。

// Initialize infowindow
var infowindow = new google.maps.InfoWindow({content: ''});

function add_marker(point, name, content)
{
   var marker = new google.maps.Marker({
      map: map,
      position: point,
      dragable: false,
      clickable: true,
      name: name
   });
   marker.content = content;
   google.maps.event.addListener(marker, 'click', function()
   {
      infowindow.content = marker.content;
      infowindow.open(map, marker);
   });
   return marker;
};

function addPostCode(zip, html) 
{
   geocoder.geocode( { 'address': zip}, function(results, status) 
   {
      if (status == google.maps.GeocoderStatus.OK)
      {
         map.setCenter(results[0].geometry.location);
         var marker = add_marker(results[0].geometry.location, zip, html)
      });
});

这个问题和答案在单个或多个信息窗口问题上帮助了我很多:

Google Maps API v3 为每个标记添加一个 InfoWindow

于 2010-08-18T14:06:34.547 回答
1
var currentInfoWindow = ''; //Global variable

google.maps.event.addListener(marker, 'click', function()
   {
      if(currentInfoWindow != '')
      { 
        currentInfoWindow.close();
        currentInfoWindow = '';
      }
      var infoWindow = new google.maps.InfoWindow({content: 'COntent'});
      infowindow.open(map, marker);
      currentInfoWindow = infowindow;
   });
于 2012-08-23T17:41:35.347 回答
0

您最好向Google Groups 询问有关此问题的 Google Maps API v3 以及任何其他相关问题。

我没有使用 API v3,但据我所知,一次只能打开一个信息窗口,所以这会自动发生。

于 2010-08-18T13:58:00.217 回答
0

有两种方法可以做到这一点...第一种是创建一个单独的信息窗口,然后使用信息窗口的.setOptions方法来更新content.

第二种方法是在代码中简单地设置一个模块级变量以包含“活动”窗口......然后如果打开.close了任何 infoWindow,请在打开新窗口之前调用它的方法。

于 2010-08-18T15:22:03.070 回答