Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 标记器上的信息窗口不';t关闭(谷歌地图)_Javascript_Google Maps_Google Maps Api 3 - Fatal编程技术网

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不,我们正在为每个对象创建单独的对象。是的,这就是我的意思。每个标记都要分开。你为什么这么做?您需要一次打开多个标记吗?我认为这是必需的,因为可以有多个标记,每个标记包含不同的信息(在信息窗口中)