簡體   English   中英

縮放更改時,google maps v3 zoom_changed事件不會觸發

[英]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件事......

  1. 現在你沒有添加你的zoom_changed監聽器,因為它是在初始化地圖之前調用的。 Javascript執行map_initialise()函數,然后在地圖加載完成之前立即嘗試並添加偵聽器。 所以將addListener放在最后的initialize函數中。

  2. 您的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM