缩放更改时,google maps v3 zoom_changed事件不会触发

Jas*_*son 4 javascript google-maps

我有一个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);
}
Run Code Online (Sandbox Code Playgroud)

Gal*_*len 11

2件事......

  1. 现在你没有添加你的zoom_changed监听器,因为它是在初始化地图之前调用的.Javascript执行map_initialise()函数,然后在地图加载完成之前立即尝试并添加侦听器.所以将addListener放在最后的initialize函数中.

  2. 您的map变量对map_initialise()函数是私有的,因此当调用reCentre()时,它无法看到您的地图对象.如果你var从地图前面删除它将变为全局,reCentre()将能够看到它.我建议var map;在map_initialise()函数上面添加,以便代码的读者看到map是全局的.