Заполните листовка всплывающим при нажатии, когда это необходимо - PullRequest
0 голосов
/ 05 мая 2018

У меня есть карта с большим количеством маркеров и сложным всплывающим контентом, сгенерированным функцией popupcontent (), вычисление которой занимает много времени, когда это делается для всех маркеров на карте с помощью функции oneachfeature.

Есть ли способ вызвать функцию в куколке только тогда, когда она действительно открыта, вместо генерации всех всплывающих окон в начале? Это значительно ускорит время загрузки.

Пока это мой код (я использую расширение markerclusterer):

    var geojson1 = L.geoJson(bigJson,{

    onEachFeature: function (feature, layer) {
        layer.bindPopup(popupcontent(feature,layer));
    }
    })
                .addLayer(tiles);
        var markers = L.markerClusterGroup({
            spiderfyOnMaxZoom: true,
            showCoverageOnHover: true,
            zoomToBoundsOnClick: true,
            disableClusteringAtZoom: 10,
            removeOutsideVisibleBounds:true
        });

        var geoJsonLayer = L.geoJson(bigJson, {
        });

        markers.addLayer(geojson1);
        map.addLayer(markers);
        map.fitBounds(markers.getBounds());

Демо: http://stefang.cepheus.uberspace.de/farmshops/

1 Ответ

0 голосов
/ 05 мая 2018

Я думаю, что вы ищете что-то вроде этого (если ваш слой интерактивный слой ):

onEachFeature: function (feature, layer) {
  layer.once("click", ()=>{
    layer.bindPopup(popupcontent(feature,layer)).openPopup();
  });
}

Используйте «один раз» вместо «вкл», чтобы он связывался только один раз при нажатии на слой.

...