Javascript 标记器上的信息窗口不';t关闭(谷歌地图)
我正在使用标记信息窗口显示信息。当在地图上的某个地方单击时,它会正确打开并关闭Javascript 标记器上的信息窗口不';t关闭(谷歌地图),javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,我正在使用标记信息窗口显示信息。当在地图上的某个地方单击时,它会正确打开并关闭 initMap(){ ................. map.addListener('click', function () { infowindow.close(); }); } var infowindow; ..... ............. function markerPushWithInfoWindow(marker) { markers.push(
initMap(){
.................
map.addListener('click', function () {
infowindow.close();
});
}
var infowindow;
.....
.............
function markerPushWithInfoWindow(marker) {
markers.push(marker);
infowindow = new google.maps.InfoWindow();
marker.addListener('click', function () {
if (infowindow) {
infowindow.close();
}
infowindow.setContent(this.info);
infowindow.open(map, marker);
});
}
在动画期间绘制标记时,将调用markerPushWithInfoWindow()。当动画运行时,信息窗口不会关闭(当在标记外即地图上单击时),它仅在动画暂停时关闭
动画:我们从DB(特定日期)中获取位置(纬度/经度)数据列表,并通过car(回放功能)对其进行动画制作。下面是一个示例,说明如何在共享一个公共信息窗口的循环中创建多个标记。注意标记事件侦听器上闭包的使用
function initialize() {
var mapOptions = {
zoom: 5,
mapTypeId: google.maps.MapTypeId.ROADMAP,
center: new google.maps.LatLng(1, 1)
};
var locations = [
[new google.maps.LatLng(0, 0), 'Marker 1', 'Infowindow content for Marker 1'],
[new google.maps.LatLng(0, 1), 'Marker 2', 'Infowindow content for Marker 2'],
[new google.maps.LatLng(0, 2), 'Marker 3', 'Infowindow content for Marker 3'],
[new google.maps.LatLng(2, 0), 'Marker 4', 'Infowindow content for Marker 4'],
[new google.maps.LatLng(2, 1), 'Marker 5', 'Infowindow content for Marker 5'],
[new google.maps.LatLng(2, 2), 'Marker 6', 'Infowindow content for Marker 6']
];
var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
var infowindow = new google.maps.InfoWindow();
google.maps.event.addListener(map, 'click', function() {
infowindow.close();
});
for (var i = 0; i < locations.length; i++) {
var marker = new google.maps.Marker({
position: locations[i][0],
map: map,
title: locations[i][1]
});
google.maps.event.addListener(marker, 'click', (function(marker, i) {
return function() {
infowindow.setContent(locations[i][2]);
infowindow.open(map, marker);
}
})(marker, i));
}
}
initialize();
函数初始化(){
变量映射选项={
缩放:5,
mapTypeId:google.maps.mapTypeId.ROADMAP,
中心:新google.maps.LatLng(1,1)
};
变量位置=[
[新的google.maps.LatLng(0,0),'Marker 1','Marker 1'的信息窗口内容],
[new google.maps.LatLng(0,1),“Marker 2”,“Marker 2的信息窗口内容”],
[新的google.maps.LatLng(0,2),“Marker 3”,“Marker 3的信息窗口内容],
[new google.maps.LatLng(2,0),“Marker 4”,“Marker 4”的信息窗口内容],
[新的google.maps.LatLng(2,1),“Marker 5”,“Marker 5的信息窗口内容],
[新的google.maps.LatLng(2,2),'Marker 6','Marker 6'的信息窗口内容]
];
var map=new google.maps.map(document.getElementById('map-canvas'),mapOptions);
var infowindow=new google.maps.infowindow();
google.maps.event.addListener(映射,'click',函数(){
infowindow.close();
});
对于(变量i=0;i
编辑:
不使用闭包的示例
什么动画?请提供一个例子来说明这个问题。如果您要为每个标记创建一个InfoWindow对象。。。这可能不是办法。@Upsidown不,我们正在为每个对象创建单独的对象。是的,这就是我的意思。每个标记都要分开。你为什么这么做?您需要一次打开多个标记吗?我认为这是必需的,因为可以有多个标记,每个标记包含不同的信息(在信息窗口中)