【问题标题】:Close all currently open infowindows in Google Maps v3?关闭 Google 地图 v3 中所有当前打开的信息窗口?
【发布时间】:2013-02-22 17:41:12
【问题描述】:

在 Google Maps v3 中,如何关闭所有当前打开的信息窗口?

我不能只在变量as some have suggested 中跟踪上次打开的信息窗口,因为在我的设置中,每个标记都有唯一的文本,因此我必须将信息窗口绑定到标记的位置创建的。

_.each(new_companies, function(c) {
  var latLng = new google.maps.LatLng(c.com_d_coo_y_wgs84,
      c.com_d_coo_x_wgs84);
  var marker = new google.maps.Marker({'position': latLng});
  marker.info = new google.maps.InfoWindow({
    content: getTooltipText(c)
  });
  google.maps.event.addListener(marker, 'mouseover', function() {
      marker.info.open(map, marker);
      // How to close all currently open info windows?
  });
  google.maps.event.addListener(marker, 'click', function() {
    marker.info.open(map, marker);
  });
  newco_markers.push(marker);
});

我想我可以遍历newco_markers 中的所有标记并关闭每个标记的信息窗口,但这感觉效率低下。

【问题讨论】:

标签: javascript google-maps google-maps-api-3


【解决方案1】:

您应该尝试使用一个信息窗口并通过API methods 更新其内容和位置:setPosition() 和 setContent()

编辑:

我假设您一次只需要一个信息窗口。如果您需要多个,则可以尝试保留一个地图(对象)或数组,并引用打开的信息窗口。

【讨论】:

  • 这是最好的解决方案 - 您需要多个信息窗口对象的唯一原因是您必须同时打开多个信息窗口
  • 不幸的是,我认为这行不通,因为如果我尝试在循环内使用infowindow.setContent(getTooltipText(c)) 设置内容,我最终会得到绑定到每个标记的相同文本。跨度>
  • 啊,想通了 - 将内容设置为 marker 的属性,然后设置为 infowindow.setContent(marker.content)。谢谢!
  • 关于堆栈溢出的这个问题有几个不同的答案。这是正确的。它首先解决了为什么要打开多个信息窗口的问题。
猜你喜欢
  • 2011-02-27
  • 2013-10-04
  • 2011-05-31
  • 2019-06-12
  • 2013-11-29
  • 1970-01-01
  • 2013-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多