You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

点击打开单个InfoWindow时隐藏其余窗口的实现咨询

解决Google Maps多个InfoWindow同时打开的问题

我太懂你折腾一整天的憋屈了——每次点标记都弹出新的InfoWindow,旧的还赖着不走,确实闹心。核心问题就是你现在每次点击都在创建新的InfoWindow实例,所以它们会堆在地图上。咱们只需要把InfoWindow的实例化移到点击事件外面,复用同一个实例就行,完全能保留你原来的内容循环逻辑。

修改步骤:

  • 只实例化一次InfoWindow:把创建InfoWindow的代码移到标记点击事件的外面,作为全局(或合适作用域内)的变量,绝对不要每次点击都new。
  • 点击时更新内容并打开:在标记的点击回调里,只用setContent()更新内容,再调用open()绑定到当前标记,旧的InfoWindow会自动关闭。

修改后的代码示例:

假设你原来的代码是循环创建标记并绑定点击事件,修改后应该是这样:

// 1. 先全局实例化一个空的InfoWindow(只做这一次!)
var infoWindow = new google.maps.InfoWindow();
var opisIndex = 0; // 确保这个变量在点击事件的作用域内可以访问

// 你的标记创建逻辑(比如循环生成标记)
var sourceLocation = {lat: 52.277255, lng: ...}; // 你的位置数据
// 假设这里有创建marker的代码,比如:
var marker = new google.maps.Marker({
  position: sourceLocation,
  map: map
});

// 2. 绑定点击事件,复用同一个InfoWindow
marker.addListener('click', () => {
  // 更新InfoWindow的内容,保留你原来的循环逻辑
  infoWindow.setContent(opis[opisIndex++ % opis.length]);
  // 打开InfoWindow,绑定到当前点击的标记
  infoWindow.open(map, marker);
});

为什么这样有效?

Google Maps的InfoWindow有个特性:同一个InfoWindow实例在地图上只能显示一次。当你调用open()时,如果它已经在地图上显示,会自动关闭之前的窗口,然后在新的标记位置打开。这样既实现了“点击新标记时自动关闭旧窗口”的需求,又只实例化了一次InfoWindow,完美解决你的问题。

这样修改后,你原来的内容循环逻辑(每次点击用opis数组的下一个内容)完全保留,同时解决了多窗口共存的问题。

内容的提问来源于stack exchange,提问作者fealost

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:05:34