leaflet.js:setView()完成动画后的Fire事件.怎么可能?

cod*_*iga 6 javascript leaflet mapbox

我目前正在使用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!");
});
Run Code Online (Sandbox Code Playgroud)

setView-command工作正常,但是当map-animation准备就绪时应该触发的函数不起作用.

有没有人有办法解决吗?

ghy*_*ybs 6

你是否尝试过moveendzoomend事件?

您可以轻松地在两个事件上附加回调:( map.once("moveend zoomend", callback)注意once一旦触发,它将删除侦听器)

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

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


Tom*_*uic 1

您可以使用moveendsetView 完成后由 Leaflet 触发的事件:

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

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

然而,每次移动地图时都会触发此操作,因此您需要在调用之前设置一些标志setView,并在处理程序中重置该平面moveend

  • 我认为这是一个很好的用途 [once](http://leafletjs.com/reference-1.0.3.html#evented-once) (2认同)