2015-11-06 349 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發起。

否則,一個簡單的超時就足夠了。特別是因爲您指定了動畫持續時間。

相關問題