2016-04-15 97 views
0

我正在使用标记infoWindow来显示信息。它会正确打开,并在地图上某处点击时关闭。Infowindow on marker不关闭(Google地图)

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 is called()when marker is drawn during animation。在动画运行时,infoWindow不会关闭(当在标记之外单击时,即在地图上)时,它仅在动画暂停时关闭。

动画:我们从数据库(特定日期)获取位置(纬度/经度)数据列表并通过汽车动画(重播功能)。

+0

什么动画?请提供一个[最小,完整和可验证示例](http://stackoverflow.com/help/mcve)来说明问题。 – MrUpsidown

+0

如果你正在为每个标记创建一个InfoWindow对象......那可能不是要走的路。 – MrUpsidown

+0

@MrUpsidown不,我们正在为每个对象创建单独的对象。 –

回答

0

下面是如何在共享一个共同infowindow的循环中创建多个标记的示例。请注意标记事件侦听器上使用闭包。

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(); 

JSFiddle demo

编辑:

例不使用封闭

JSFiddle demo

相关问题