在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/