【问题标题】:Fill Leaflet popup on click when acctually needed在实际需要时点击填写传单弹出窗口
【发布时间】:2018-05-05 09:36:29
【问题描述】:

我有一个包含大量标记和复杂弹出内容的地图,由名为 popupcontent() 的函数生成,当使用 oneachfeature 函数对地图上的所有标记完成计算时,需要花费大量时间来计算。

有没有办法只在实际打开时触发 pupop 中的函数,而不是在开始时生成所有弹出窗口?这会大大加快加载时间。

这是我目前的代码(我正在使用 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/

【问题讨论】:

    标签: javascript leaflet geojson leaflet.markercluster


    【解决方案1】:

    我认为您正在寻找的是这样的(如果您的图层是interactive layer):

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

    使用“once”而不是“on”,这样它只会在单击图层时绑定一次。

    【讨论】:

    • 非常感谢!我还添加了 .openPopup();因为否则我必须单击两次才能打开一个弹出窗口: layer.bindPopup(popupcontent(feature,layer)).openPopup();
    猜你喜欢
    • 2015-12-31
    • 2021-07-22
    • 1970-01-01
    • 2022-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-21
    • 2015-07-26
    相关资源
    最近更新 更多