2016-12-05 38 views
0

考慮這個example如何在moveend事件處理程序中調整地圖位置時防止移動事件?

如果在地圖完成移動時中心圓包含標記,則我平移地圖以便標記位置是地圖的中心。

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

map.on('moveend', mapMoveEnd); 

儘管在平移之前調用map.off('moveend'),但事件處理函數被調用。

這是一個錯誤還是我做錯了什麼?

編輯:下面的評論幫助我發現,這是由於panTo()被動畫。

+0

因爲JS是.off執行完畢後,嘗試對啞劇 –

+0

超時@AlexParij我還以爲確切之前異步啞劇可能被稱爲相反的異步原因:'.on'在'.panTo'完成之前執行,因此''moveend''監聽器已經重新連接? – ghybs

+0

感謝您讓我走上正軌。 @ghybs是正確的,panTo()結束後(動畫:假解決了我的PB,但看起來不太好) – YaFred

回答

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); 
相關問題