Google Maps: закрытие InfoWindow после автоповорота - PullRequest
2 голосов
/ 02 августа 2011

У меня есть карта с кучей маркеров и таблица данных, которая соответствует каждому маркеру.Когда пользователь нажимает на элемент в таблице, InfoWindow для соответствующего маркера открывается.Все работает нормально, когда карта масштабируется, и все маркеры видны, но если карта масштабируется, и InfoWindow для внеэкранного маркера открывается нажатием на элемент в таблице, вот что происходит:

  1. Карта прокручивается в правильное место, где InfoWindow уже отображается открытым
  2. Карта прекращает панорамирование, и InfoWindow исчезает.

Есть ли какие-либо предложения относительно того, что может происходить и как это решить?

1 Ответ

4 голосов
/ 02 августа 2011

Хорошо, проблема связана с тем, что я использовал Marker Clusterer на карте ... по сути, происходило следующее:

  1. Щелкните элемент в таблице, InfoWindow откроется
  2. Карта перемещается на место для отображения InfoWindow
  3. Когда панорамирование завершено, кластерный маркер затем перерисовывает (если необходимо) и принудительно закрывает 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]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...