Google Maps API V3: есть ли обратный вызов или слушатель события для мероприятия SETMAP ()?
-
27-09-2019 - |
Вопрос
Я использую 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);
}
Это немного взлома, но я надеюсь, что кто-то еще найдет это полезное.
Другие советы
Может быть, это поможет: http://www.basicslabs.com/projects/progressbar/#examples.
И пример: http://www.basicslabs.com/projects/progressbar/example/progressbar.html.