2015-11-06 350 views
3

我目前正在使用leaflet.js,并且现在正在网上搜索相当多的东西,以查明:如果有事件,那么可以在异步函数setView()的动画结束后触发该事件。leaflet.js:setView()完成动画时触发事件。这怎么可能?

这是我的尝试:

map.setView([lat, lon ], 12 , { 
    pan: { animate: true , duration: 0.5 }, 
    zoom: { animate: true }, 
    animate: true 
}.on('ready', function(e) { 
    console.log("animation finished!"); 
}); 

的的setView命令的作品完美,但功能,应该在地图动画准备好了,不工作被解雇。

有没有人有解决方案?

回答

1

您可以使用由单张的setView解雇后moveend事件结束:

http://leafletjs.com/reference.html#map-moveend

map.on('moveend', function(e){console.log("test")});

但是,每次移动地图时都会触发此事件,因此您需要在调用setView之前设置一些标志,然后重置moveend处理程序中的该单元。

+1

我认为这是[once](http://leafletjs.com/reference-1.0.3.html#evented-once) – Jacob

3

您是否尝试过moveendzoomend事件?

您可以在这两个事件附加回调容易:map.once("moveend zoomend", callback)(注意once一旦被触发,将删除监听器)

一个非常特殊的情况下,可能不会触发回调:如果setView不会改变任何东西,即请求的视图已经是当前视图。要进行检查,在所有情况下,moveend事件可能由setView发起。

否则,一个简单的超时就足够了。特别是因为您指定了动画持续时间。

相关问题