代码之家  ›  专栏  ›  技术社区  ›  Stefan

实际需要时,单击即可填写传单弹出窗口

  •  3
  • Stefan  · 技术社区  · 6 年前

    我有一张地图,上面有很多标记和一个复杂的弹出式内容,由一个名为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/

    1 回复  |  直到 6 年前
        1
  •  4
  •   kockburn    6 年前

    我想你要找的是这样的(如果你的图层是 interactive layer ):

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

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