如何在moveend事件处理程序中调整地图位置时阻止moveend事件?

时间:2016-12-05 16:21:13

标签: leaflet

考虑这个example

如果中心圆在地图完成移动时包含标记,则我会平移地图,使标记位置成为地图的中心。

function mapMoveEnd(e) {
    map.off('moveend', mapMoveEnd);
    map.panTo(somewhere); 
    map.on('moveend', mapMoveEnd);
}

map.on('moveend', mapMoveEnd);

虽然在平移之前调用map.off('moveend'),但会调用事件处理程序。

这是一个错误还是我做错了什么?

编辑:下面的评论帮助我发现这是由于panTo()被动画化了。

1 个答案:

答案 0 :(得分:0)

解决方案是将超时设置为超过动画

function mapMoveEnd(e) {
    map.off('moveend', mapMoveEnd);
    map.panTo(somewhere, { duration: .25 }); // seconds
    setTimeout(function(){ map.on('moveend', mapMoveEnd); }, 300); // milliseconds
}

map.on('moveend', mapMoveEnd);