Google Maps API V3: есть ли обратный вызов или слушатель события для мероприятия SETMAP ()?

StackOverflow https://stackoverflow.com/questions/3461246

Вопрос

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

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

Это было полезно?

Решение

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

При инициализации карты я создал слушатель для мероприятия «FDLE», который скрывает анимацию «Загрузка». Событие «IDLE» срабатывает всякий раз, когда карта завершается перерисовкой после смены прокрутки или масштабирования:

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

И в моей функции, чтобы очистить накладки, я сначала покажу анимацию загрузки, затем очистите каждый маркер с помощью SetMap (NULL). Тогда я очень немного повторяю карту, изменив долготу .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);
}

Это немного взлома, но я надеюсь, что кто-то еще найдет это полезное.

Другие советы

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top