我目前这样做是为我的谷歌地图创建标记。
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;
}
我对for循环不满意,关闭标记,我知道类似的东西可以通过使用一个引用来完成:
if(infowindow)infowindow.close();
我使用上面代码的原因是因为我正在做类似的事情
markers[myPoint]['infowindow'].open(map, markers[myPoint]);
其他地方,(myPoint是一个数字)。
我怎样才能避免这种循环关闭打开的infowindows并以不错的方式做到这一点?
答案 0 :(得分:3)
将最后打开的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;
}
答案 1 :(得分:2)
另一种方法是只有一个InfoWindow,在标记点击事件中,你可以调用InfoWindow的setContent属性,然后使用map和marker作为参数调用open事件。
我在我的应用程序中找到了更好的方法,我在地图上有10,000多个标记。
请参阅:http://code.google.com/apis/maps/documentation/javascript/reference.html#InfoWindow
infoWindow = new google.maps.InfoWindow();
function createMarker(posn, title, html) {
var marker = new google.maps.Marker({ position: posn, title: title, draggable: false });
marker['content'] = html;
google.maps.event.addListener(marker, "click", function () {
infoWindow.setContent(this['content']);
infoWindow.open(map, this);
});
return marker;
}