点击打开单个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
相关产品推荐
相关产品推荐

