我有一堆带有标记的地图,以及与每个标记对应的数据表。当用户点击表格中的项目时,会打开相应标记的InfoWindow
。当地图缩小并且标记全部可见时,一切正常,但如果地图被放大,并且通过单击表格中的项目打开了屏幕外标记的InfoWindow
,则这是什么发生的情况:
InfoWindow
已经打开InfoWindow
消失。有关可能发生的事情以及如何解决此问题的任何建议?
答案 0 :(得分:4)
好吧,这个问题与我在地图上使用Marker Clusterer的事实有关......基本上,发生了以下情况:
InfoWindow
打开InfoWindow
InfoWindow
关闭。我的解决方案是,当点击表格中的项目时,我会得到相应的Marker's
latlng,手动平移到此位置,等待通过'idle'监听器完成平移,并在完成时(并且Clusterer完成了它的重新绘制),然后我打开InfoWindow
。
// get map, marker positions
var mapLatLng = GLOBAL_map.getCenter();
var markerLatLng = GLOBAL_markers[index].getPosition();
// pan the map
if(!markerLatLng.equals(mapLatLng)) {
// map will need to pan
GLOBAL_map.panTo(markerLatLng);
google.maps.event.addListenerOnce(GLOBAL_map, 'idle', function() {
// open InfoWindow
GLOBAL_infowindow.setContent(GLOBAL_markers_content[index]);
GLOBAL_infowindow.open(GLOBAL_map, GLOBAL_markers[index]);
});
} else {
// map won't be panning, which wouldn't trigger 'idle' listener
GLOBAL_infowindow.setContent(GLOBAL_markers_content[index]);
GLOBAL_infowindow.open(GLOBAL_map, GLOBAL_markers[index]);
}
答案 1 :(得分:0)
这使我发疯。我的解决方案比较简单。我只是设置了一个计时器,以免在单击图钉后的一秒钟内刷新地图。
从全局开始:
// global timer variable
var clickTime = Date.now() - 1001;
然后定义您的标记点击,例如:
marker.addListener('click', function() {
infoWindow.setContent(infowincontent);
infoWindow.open(map, marker);
clickTime = Date.now();
});
然后设置您的空闲状态,例如:
google.maps.event.addListener(map, 'idle', function () {
if (Date.now() > (clickTime + 1000))
updateMap();
});
答案 2 :(得分:0)
不要使用idle
事件。改用API spec中的dragend
和zoom_changed
事件,这样您就可以在不刷新地图的情况下打开infoBox。
google.maps.event.addListener(map, 'dragend', function() {
getMarkers();
});
google.maps.event.addListener(map, 'zoom_changed', function() {
getMarkers();
});