我想在用户移动地图时监听'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事件,就像事件是异步的一样。
答案 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);
}