Событие пожара после завершения MarkerClusterer
-
13-12-2019 - |
Вопрос
Итак, у меня есть приложение, содержащее карту с (несколько сотен) маркеров.Я использую markclusterer.js, предоставленный Google, для кластеризации моих маркеров и упрощения просмотра.Я использую API V3.
Меня все устраивает.Но мне хотелось бы выполнить какое-то действие, когда кластеризатор маркеров завершит кластеризацию всех маркеров.Я пытался сделать это сам, но не глядя.
Какие-либо предложения?(Я предполагаю, что это будет проще, чем я думаю, и мой мозг просто поджарен)
Решение
Мне просто интересно то же самое.Вот как я это сделал:
google.maps.event.addListener(markerClusterer, 'clusteringend', myFunction);
. Другие советы
Будет ли карта "Idle" Мероприятие для вас?Он должен огонь, когда маркер заканчивается (при условии, что вы загружаете маркерщиков, когда нагрузки страницы).
Кажется, эта библиотека не поддерживается.Он не работает с версией 3 уже много лет, и решение не было разработано.
Итак, я скачал несвернутую версию и поместил ее в исходный код проектов, над которыми работаю.Принятое решение будет работать (для версии 3), только если вы внесете следующие изменения непосредственно в библиотеку:
найти функцию createClusters_ добавить google.maps.event.trigger(this, "clusteringend", this);
после цикла for.Итак, это будет выглядеть так:
MarkerClusterer.prototype.createClusters_ = function() {
if (!this.ready_) {
return;
}
// Get our current map view bounds.
// Create a new bounds object so we don't affect the map.
var mapBounds = new google.maps.LatLngBounds(this.map_.getBounds().getSouthWest(),
this.map_.getBounds().getNorthEast());
var bounds = this.getExtendedBounds(mapBounds);
for (var i = 0, marker; marker = this.markers_[i]; i++) {
if (!marker.isAdded && this.isMarkerInBounds_(marker, bounds)) {
this.addToClosestCluster_(marker);
}
}
google.maps.event.trigger(this, "clusteringend", this);
};
Теперь вы можете использовать:
google.maps.event.addListener(markerClusterer, 'clusteringend', myFunction);