40

所以我正在用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任何绘图命令放到地图上(我将其作为图层执行),直到地图完成动画。

如何改为异步执行此操作?

4

3 回答 3

65

您可以使用map.zoomendAPI here中描述的事件

map.on('zoomend', function() {
    drawGrid();
});

一旦地图完成缩放动画,它将调用该drawGrid函数。

于 2013-09-04T11:56:34.103 回答
19

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

map.on("zoomstart", function (e) { console.log("ZOOMSTART", e); });
map.on("zoomend", function (e) { console.log("ZOOMEND", e); });
于 2014-01-29T13:47:24.427 回答
1

这是单击管理左旋缩放控件的最佳方法

    /*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");
    });
于 2019-03-26T10:43:08.307 回答