Хорошо, я немного поэкспериментировал с этим сейчас;)
В файле 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 и этим плагином должен найти лучшее и более удобное решение;).
person
ajl31701
schedule
13.06.2019