Javascript 很好地关闭其他信息窗口
我现在这样做是为了为我的谷歌地图创建标记Javascript 很好地关闭其他信息窗口,javascript,google-maps,Javascript,Google Maps,我现在这样做是为了为我的谷歌地图创建标记 function createMarker(posn, title, html) { var marker = new google.maps.Marker({ position: posn, title: title, draggable: false }); marker['infowindow'] = new google.maps.InfoWindow({ content: html });
function createMarker(posn, title, html) {
var marker = new google.maps.Marker({ position: posn, title: title, draggable: false });
marker['infowindow'] = new google.maps.InfoWindow({ content: html });
infoWindows.push(marker['infowindow']);
google.maps.event.addListener(marker, "click", function () {
for (i = 0; i < infoWindows.length; i++) {
infoWindows[i].close();
}
this['infowindow'].open(map, this);
});
return marker;
}
函数createMarker(posn、title、html){
var marker=new google.maps.marker({position:posn,title:title,draggable:false});
marker['infowindow']=新的google.maps.infowindow({content:html});
推(标记['infowindow']);
google.maps.event.addListener(标记“单击”,函数(){
对于(i=0;i
我对for循环不满意,对于关闭标记,我知道可以使用一个引用来完成类似的操作:
if(infowindow)infowindow.close()
我之所以使用上述代码,是因为我在做类似markers[myPoint]['infowindow'].打开(地图,markers[myPoint])
else,其中(myPoint是一个数字)
如何避免关闭打开的infoWindow并以良好的方式执行此for循环?只需将上次打开的infoWindow存储在全局变量中:
var activeInfoWindow;
function createMarker(posn, title, html) {
var marker = new google.maps.Marker({ position: posn, title: title, draggable: false });
marker['infowindow'] = new google.maps.InfoWindow({ content: html });
infoWindows.push(marker['infowindow']);
google.maps.event.addListener(marker, "click", function () {
if ( activeInfoWindow == this['infowindow'] ) {
return;
}
if ( activeInfoWindow ) {
activeInfoWindow.close();
}
this['infowindow'].open(map, this);
activeInfoWindow = this['infowindow'];
});
return marker;
}
只需将上次打开的infoWindow存储在全局变量中:
var activeInfoWindow;
function createMarker(posn, title, html) {
var marker = new google.maps.Marker({ position: posn, title: title, draggable: false });
marker['infowindow'] = new google.maps.InfoWindow({ content: html });
infoWindows.push(marker['infowindow']);
google.maps.event.addListener(marker, "click", function () {
if ( activeInfoWindow == this['infowindow'] ) {
return;
}
if ( activeInfoWindow ) {
activeInfoWindow.close();
}
this['infowindow'].open(map, this);
activeInfoWindow = this['infowindow'];
});
return marker;
}
另一种方法是只使用一个InfoWindow,在marker click事件上调用InfoWindow的setContent属性,然后调用open事件,并将map和marker作为参数 我发现这种方法在我的应用程序中更好,因为我在地图上有10000多个标记 见:
另一种方法是只使用一个InfoWindow,在marker click事件上调用InfoWindow的setContent属性,然后调用open事件,并将map和marker作为参数 我发现这种方法在我的应用程序中更好,因为我在地图上有10000多个标记 见:
单击标记时出现错误,然后单击其信息窗口上的关闭按钮,然后再次单击该标记。它将不再显示信息窗口。若要修复此问题,请删除(activeInfoWindow==this['infowindow']){return;}在单击标记时出现错误,然后单击其信息窗口上的“关闭”按钮,然后再次单击该标记。它将不再显示信息窗口。要解决此问题,请删除if(activeInfoWindow==this['infowindow']){return;}