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 事件,就像事件是异步的一样。

4

1 回答 1

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);
}
于 2012-08-03T07:34:21.793 回答