2010-10-28 53 views
4

我有一個v3谷歌地圖加載完全符合我的預期和標記做我想要的。但是,當我更改縮放時,我添加的zoom_changed事件似乎不會觸發。任何人都可以解釋爲什麼?我的代碼如下。谷歌地圖v3 zoom_changed事件不會觸發當變焦變化

function map_initialise() { 
    var mapCentre = new google.maps.LatLng(53.75, -1.50); 
    var mapOptions = { 
     zoom: 6, 
     center: mapCentre, 
     mapTypeId: google.maps.MapTypeId.HYBRID 
    } 

    var map = new google.maps.Map(document.getElementById('map_canvas'), mapOptions); 

    var latlong1 = new google.maps.LatLng(52.456550,1.680182); 
    var windowtext1 = 'Some text'; 
    var popup1 = new google.maps.InfoWindow({ 
     content: windowtext1 
    }); 
    var marker1 = new google.maps.Marker({ 
     position: latlong1, 
     title: "Some text" 
    }); 
    google.maps.event.addListener(marker1, 'click', function() { 
     popup1.open(map,marker1); 
    }); 
    marker1.setMap(map); 
} 

google.maps.event.addDomListener(window, 'load', map_initialise); 

google.maps.event.addListener(map, 'zoom_changed', function() { 
    setTimeout(reCentre, 3000); 
}); 

function reCentre() { 
    var newcentre = new google.maps.LatLng(53.000,0.000); 
    map.panTo(newcentre); 
} 

回答

11

2東西...

  1. 眼下沒有被添加你的聽衆ZOOM_CHANGED監守地圖初始化之前,它被稱爲。 Javascript執行map_initialise()函數,然後立即嘗試並在地圖加載完成之前添加偵聽器。因此,在最後將addListener放入初始化函數中。

  2. 您的地圖變量對於map_initialise()函數是私有的,所以當調用reCentre()時,它無法看到您的地圖對象。如果您從地圖前刪除var,它將變爲全局,reCentre()將能夠看到它。我建議在map_initialise()函數上面添加var map;,以便代碼的讀者能夠看到map是全局的。

+1

謝謝,蓋倫。隨着這些細微的變化,事件現在正在發射。 – Jason 2010-11-01 09:07:18

+0

謝謝..很好的回答......................... – 2014-07-09 12:51:34

2

如果推薦的解決方案有效,它可能只是一個巧合,涉及一個小的,簡單的地圖。在一個大型的混合地圖上,它並不能解決問題,這實際上更復雜。 zoom_changed的監聽器確實被添加,並在那一刻觸發一次;該偵聽器的動作部分將正確執行。但此後,在變焦控制每一次點擊將導致以下消息出現在Firefox的錯誤控制檯:

Error: g.e is undefined
Source File: http://maps.gstatic.com/intl/en_us/mapfiles/api-3/10/20/main.js
Line: 19

,不進行監聽行動。

如果包含了「地方」庫(支持搜索框),行爲是相同的,但在錯誤信息源文件不同的是:

Error: g.e is undefined
Source File: http://maps.gstatic.com/cat_js/intl/en_us/mapfiles/api-3/10/20/%7Bmain,places%7D.js
Line: 19

是什麼使建議的解決方案更可疑的是,可以在zoom_changed監聽器之前添加標記和其他監聽器(用於在地圖上和標記上「點擊」),並且它們始終可靠地工作。