很好地关闭其他infowindows

时间:2011-02-24 21:54:25

标签: 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 });

            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并以不错的方式做到这一点?

2 个答案:

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