Хорошо, теперь я немного поэкспериментировал с этим;)
В leaflet.markercluster-src.js я создал массив с именем _spiderMan[]
, который заполняется объектами spiderfy, по которым щелкнули.
spiderfy: function() {
if (this._group._spiderfied === this || this._group._inZoomAnimation) {
return;
}
var childMarkers = this.getAllChildMarkers(null, true),
group = this._group,
map = group._map,
center = map.latLngToLayerPoint(this._latlng),
positions;
// this._group._unspiderfy(); //deactivated
var markers = markers + childMarkers;
_spiderMan.push(this); //new
if (childMarkers.length >= this._circleSpiralSwitchover) {
positions = this._generatePointsSpiral(childMarkers.length, center);
} else {
center.y += 10;
positions = this._generatePointsCircle(childMarkers.length, center);
}
this._animationSpiderfy(childMarkers, positions);
},
Затем я создал цикл for, который проходит через массив и каждый раз вызывает _spiderMan[i].unspiderfy(zoomDetails)
.Я встроил этот цикл в функцию _unspiderfyZoomAnim
для тестирования.Означает каждый раз, когда вы увеличиваете или уменьшаете масштаб, все открытые группы суммируются.
_unspiderfyZoomAnim: function(zoomDetails) {
if (L.DomUtil.hasClass(this._map._mapPane, 'leaflet-touching')) {
return;
}
this._map.off('zoomanim', this._unspiderfyZoomAnim, this);
var i;
for (i = 0; i < _spiderMan.length; i++) {
_spiderMan[i].unspiderfy(zoomDetails);
}
_spiderMan = [];
},
Кроме того, следующие функции должны быть деактивированы в функции unspiderfy
:
unspiderfy: function(zoomDetails) {
/// <param Name="zoomDetails">Argument from zoomanim if being called in a zoom animation or null otherwise</param>
// if (this._group._inZoomAnimation) {
// return;
// }
this._animationUnspiderfy(zoomDetails);
// this._group._spiderfied = null;
},
Тактеперь можно открывать и закрывать несколько групп кластеров, но это всего лишь обходной путь, и я думаю, что это будет иметь некоторые плохие последствия где-то из-за закомментирования или удаления строк кода.
Я думаю, что кто-то с большим опытом работы с JS и этим плагином должен найти лучшее и более удобное решение;).