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;}