我需要一些JavaScript和Google Maps API的帮助。
我的网站上有一张谷歌地图地图,上面显示了标记,点击时会显示自定义InfoBox
。
单击标记时,会为此InfoBox
创建一个新对象:
google.maps.event.addListener(marker, 'click', function() {
infoBox = new InfoBox({id: id, content: description, latlng: marker.getPosition(), map: map});
});
当访问者连续点击两个标记时,他面临两个InfoBox
个。当用户点击地图或点击右上角的十字架时,我会运行两行隐藏InfoBox
的代码:
google.maps.event.addDomListener(closeImg, 'click', removeInfoBox(this));
google.maps.event.addDomListener(map, 'click', removeInfoBox(this));
我想要发生的是,当用户点击标记时,所有先前的标记都将被隐藏(因此,每次点击标记后,只会隐藏一个先前的InfoBox
。
我正在努力完成这项工作。如果我使用“点击”事件在所有标记上创建DomListener
,我就永远不会弹出InfoBox
。如果我在创建removeInfoBox(this);
的新对象之前添加InfoBox
,我也永远不会显示InfoBox
。
在哪里以及如何防止出现多个InfoBox
的正确方法?
答案 0 :(得分:4)
我发现了一篇关于如何删除标记并跟踪它们的帖子,我可以熟悉我的脚本。
首先我声明数组用于存储打开的infoBox'es和删除它们的函数(clearOverlays()):
// Declare global array for hiding infowindows
var infowindowsArray = [];
function clearOverlays(){
if(infowindowsArray){
for (i in infowindowsArray){
infowindowsArray[i].setMap(null);
}
}
}
然后,当我为标记的click事件创建一个监听器时,它会将新的infoBox添加到该标记。首先,我使用clearOverlays()函数清除所有其他信息框。然后我创建新的infoBox并将其推入数组:
google.maps.event.addListener(marker, 'click', function() {
clearOverlays();
infoBox = new InfoBox({id: id, content: description, latlng: marker.getPosition(), map: map});
infowindowsArray.push(infoBox);
});
这解决了我自定义创建的infoBox'es的问题。