Google Maps API v3: есть ли обратный вызов или прослушиватель событий для события setMap ()? - PullRequest
13 голосов
/ 11 августа 2010

Я использую Google Maps API v3 на разрабатываемом веб-сайте.У меня есть выпадающий список под моей картой, который позволяет пользователю переключаться между различными наборами маркеров, которые будут отображаться на карте.Каждый маркер отображается с помощью marker.setMap().

Моя проблема в том, что на карте иногда требуется много времени для отображения новых маркеров, особенно в IE.Я хочу показать анимацию «Загрузка», пока карта переключает маркеры.Но я не знаю, как определить, когда карта закончила отображать новые данные (нет загрузки страницы, так как это все AJAX).Есть ли обратный вызов или прослушиватель событий для события setMap(), поэтому я могу вызвать функцию, чтобы остановить анимацию «Загрузка», когда последний маркер завершил загрузку?

Ответы [ 2 ]

21 голосов
/ 12 августа 2010

Кажется, что нет функции обратного вызова или прослушивателя событий для setMap (), но я нашел способ выполнить то, что я хотел.Я загружаю карту Google с помощью jQuery.Вот мой код.

При инициализации карты я настраивал прослушиватель для события 'idle', которое скрывает анимацию "загрузки".Событие 'idle' запускается всякий раз, когда карта перерисовывается после изменения прокрутки или масштабирования:

google.maps.event.addListener(this.map, 'idle', function() {
 $('#loading').hide();
});

И в моей функции очистки оверлеев я сначала показываю анимацию загрузки, затем очищаю каждый маркер, используя setMap(ноль).Затем я немного перецентрирую карту, изменив долготу на .000000001.Это происходит после всех вызовов setMap () и вызывает событие 'idle', которое скрывает загрузочную анимацию.

// clear overlays from the map
function clearOverlays() {
 $('#loading').show();

 // clear the markers from the active data array
 if (activeData) {
  for (i in activeData) { activeData[i].setMap(null); }
 }
 activeData = '';

 // very slightly recenter the map to trigger the 'idle' event
 var centerlat = MYMAP.map.getCenter().lat();
 var centerlng = MYMAP.map.getCenter().lng() + .000000001;
 recenter = new google.maps.LatLng(centerlat, centerlng);
 MYMAP.map.setCenter(recenter);
}

Это что-то вроде хака, но я надеюсь, что кто-то еще посчитает это полезным.

0 голосов
/ 20 августа 2010
...