this page上,我显示了一个Google地图,其中InfoBubble出现在地图标记上。 InfoBubbles最初是打开的。如果关闭它们,则可以通过单击标记来重新打开它们。我希望InfoBubbles最初关闭。相关功能(简化为删除无关内容)为:

addMarker = function(festivalData, hasPopup) {

    var map = this._map;

    this.marker = new google.maps.Marker({
        position: new google.maps.LatLng(festivalData.latitude, festivalData.longitude),
        map: map
    });

    if (hasPopup) {
        var infoBubble = new InfoBubble({
            map: map,
            content: "<a href='" + festivalData.url + "'>" + festivalData.name + "</a>",
            hideCloseButton: false,
        });

        infoBubble.open(map, this.marker);

        var infoBubbleHandler = function(bubble) {
            return function() {
                if (!bubble.isOpen()) {
                    bubble.open(map, this.marker);
                }
            }
        }(infoBubble);

        google.maps.event.addListener(this.marker, 'click', infoBubbleHandler);
    }
}


我希望通过删除行

infoBubble.open(map, this.marker);


这可以达到我的目标,但这只是将InfoBubbles完全删除,因此当您单击标记时它们甚至不会出现。如何使InfoBubbles最初显示为关闭,但是当您单击标记时它们会打开?

最佳答案

将所有对此this.marker的引用更改为局部变量,并更改了该处理函数的创建方式,它的工作方式与我认为的要

addMarker = function(festivalData, hasPopup) {

    var map = this._map;

    var marker = new google.maps.Marker({
        position: new google.maps.LatLng(festivalData.latitude, festivalData.longitude),
        map: map
    });

    if (hasPopup) {
        var infoBubble = new InfoBubble({
            map: map,
            content: "<a href='" + festivalData.url + "'>" + festivalData.name + "</a>",
            hideCloseButton: false,
        });

        //infoBubble.open(map, this.marker);

        var infoBubbleHandler = function() {
            if (!infoBubble.isOpen()) {
                infoBubble.open(map, marker);
            }
        };

        google.maps.event.addListener(marker, 'click', infoBubbleHandler);
    }
}

关于javascript - 带有InfoBubbles的Google Map,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8844207/

10-09 17:36