2011-09-01 136 views
4

我有一個谷歌地圖v3 zoom_change的問題,因爲它不能完美解決我的需求。谷歌地圖v3縮放結束

我有2個未滿足的要求:

  • 我需要得到那些邊界後,用戶在縮放控制點擊,縮放已經在地圖上被reajusted裏面的邊界和展示點。方法zoom_change做它之前重新縮放,並且邊界不是我需要的。

  • 方法zoom_change被稱爲每次,例如,每當我執行fitBoundssetZoom。當單擊zoomcontrol或移動鼠標滾輪時,我只需要它。

在v3 API中是否有解決這些問題的解決方案?

回答

6

該事件被稱爲zoom_changed(不是zoom_change)。此事件的事件處理程序在縮放後發生更改後調用。確實不是直截了當地阻止用戶從該程序引起的縮放變化。一個可能的解決方案是保持一個「全局」變量,如userZoom,它表示用戶是否觸發了縮放。

var userZoom = true; // initial value: be prepared for user action 
// Install listener 
google.maps.event.addListener(Map.self, 'zoom_changed', function() { 
    if (userZoom) {  
     // the user changed zoom: do what should be done 
    } 
    else { 
     // zoom change caused by a program action: ignore 
    } 
    userZoom = true; // be prepared for the user zoom action  
}); 

調用任何改變變焦的程序操作之前,設置userZoom = false,例如

userZoom = false; 
map.setZoom(9); 
+0

這是一個優秀的,透明的解決方案。感謝分享 – Haroldo

+1

這個答案很有用,但沒有解決檢測'zoom_end'的問題。當需要新的縮放級別時,會發生「縮放變化」,而不是當縮放動畫完成時,這是OP想要的(我也是如此)。 –

4

聽取空閒事件。

Google Maps Javascript API V3 Reference

空閒:在地圖上變成平移或縮放 閒置後會觸發此事件。

+0

這 - 謝謝。我正在單獨處理拖動和縮放。這更優雅。 – Thilo

0