![](/img/trans.png)
[英]google maps api v3 zoom_changed event fired twice after fitBounds called
[英]google maps v3 zoom_changed event does not fire when zoom changes
我有一個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);
}
2件事......
現在你沒有添加你的zoom_changed監聽器,因為它是在初始化地圖之前調用的。 Javascript執行map_initialise()函數,然后在地圖加載完成之前立即嘗試並添加偵聽器。 所以將addListener放在最后的initialize函數中。
您的map變量對map_initialise()函數是私有的,因此當調用reCentre()時,它無法看到您的地圖對象。 如果從地圖前面刪除var
,它將變為全局變量,並且reCentre()將能夠看到它。 我建議添加var map;
在map_initialise()函數之上,所以代碼的讀者會看到map是全局的。
如果推薦的解決方案有效,那可能只是一個與小而簡單的地圖相關的巧合。 在大型混合地圖上,它無法解決問題,實際上更復雜。 zoom_changed的監聽器確實被添加,並在那一刻觸發一次; 然后,該偵聽器的動作部分正確執行。 但此后,每次單擊縮放控件都會導致以下消息顯示在Firefox的錯誤控制台中:
錯誤:ge未定義
源文件: http : //maps.gstatic.com/intl/en_us/mapfiles/api-3/10/20/main.js
行:19
並且不執行偵聽器操作。
如果包含“places”庫(以支持搜索框),行為是相同的,但錯誤消息中的源文件是不同的:
錯誤:ge未定義
源文件: http : //maps.gstatic.com/cat_js/intl/en_us/mapfiles/api-3/10/20/%7Bmain,places%7D.js
行:19
使建議的解決方案更加可疑的是,可以在zoom_changed偵聽器之前添加標記和其他偵聽器(用於在地圖上和標記上“單擊”),並且它們始終可靠地工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.