Leaflet.js:检测地图何时完成缩放

时间:2013-09-04 08:37:40

标签: javascript asynchronous leaflet

所以我用leafet.js制作这个应用程序。 此应用程序要求我必须手动将网格绘制到屏幕上, 我已经注意了draw_grid()函数,它将一堆多边形绘制到屏幕上。

我有这个函数,我打电话来触发传单地图的更改。 zoom - 缩放整数和size是类似{x:1,y:1}的字典,用于控制绘制到地图上的图块的大小。 (他们需要随着地图绘制单位的变化而改变地图上的纬度,长点。

function changeZoom(zoom,size){
    map.setZoom(zoom); 
    setSize(size);   
    setTimeout(drawGrid,500)s;

}

我必须使用setTimeout的原因是因为传单ignores任何绘图命令到地图上(我正在做一个图层),直到地图完成动画制作。

如何异步执行此操作?

3 个答案:

答案 0 :(得分:43)

您可以使用API​​ here

中描述的map.zoomend事件
map.on('zoomend', function() {
    drawGrid();
});

地图完成缩放动画后,将调用drawGrid函数。

答案 1 :(得分:14)

在Leaflet的较新版本中,“zoomed”不再是一个事件。现在有“zoomstart”和“zoomend”事件:

map.on("zoomstart", function (e) { console.log("ZOOMSTART", e); });
map.on("zoomend", function (e) { console.log("ZOOMEND", e); });

答案 2 :(得分:0)

这是单击托管leflet缩放控件的最佳方法

    /*Zoom Control Click Managed*/
    var bZoomControlClick = false;
    mymap.on('zoomend',function(e){
        var currZoom = mymap.getZoom();
        if(bZoomControlClick){
            console.log("Clicked "+currZoom);
        }
        bZoomControlClick = false;
    });     
    var element = document.querySelector('a.leaflet-control-zoom-in');
    L.DomEvent.addListener(element, 'click', function (e) {
        bZoomControlClick = true;
        $(mymap).trigger("zoomend");
    });
    var element1 = document.querySelector('a.leaflet-control-zoom-out');
    L.DomEvent.addListener(element1, 'click', function (e) {
        bZoomControlClick = true;
        $(mymap).trigger("zoomend");
    });