用户移动地图但不移动setCenter方法时捕获bounds_changed事件

时间:2012-08-03 07:06:22

标签: javascript google-maps google-maps-api-3

我想在用户移动地图时监听'bounds_changed'事件,更改缩放但我不希望在我的程序调用setCenter或setZoom方法时触发它。所以我尝试在设置中心之前删除事件,然后再添加它。然而,它没有奏效,我的事件仍在被解雇。

var currentBoundsListener = null;

function addBoundsChangedListener() {
    currentBoundsListener = google.maps.event.addListener(map, 'bounds_changed', function () {
        // Whatever.
    });
}

function setCenter(lat, lng) {
    google.maps.event.removeListener(currentBoundsListener);
    var geo = new google.maps.LatLng(lat, lng);
    map.setCenter(geo);
    addBoundsChangedListener();
}

我认为在向其添加新侦听器之后,映射正在创建bounds_changed事件,就像事件是异步的一样。

1 个答案:

答案 0 :(得分:3)

bounds_changed事件确实是异步触发的,因此,您可以使用一个指示何时忽略它的全局布尔变量,而不是删除侦听器,例如:

var ignore = false; // this var is global;
currentBoundsListener = google.maps.event.addListener(map, 'bounds_changed', function () {
if(ignore) {
   ignore = false;
   return;
}

// Whatever.
});


function setCenter(lat, lng) {
    var geo = new google.maps.LatLng(lat, lng);
    ignore = true;
    map.setCenter(geo);
}