我正在使用谷歌地图api v3。我需要在地图上捕获所有idle
个事件,但是当我通过代码更改边界或缩放时我不想看到它们。当我使用fitBounds
方法时,我的问题就存在了。我正在使用一个标志来决定是否因为我或用户而创建了一个事件。当我使用fitBounds时,如果更改了边界,则会触发它,但有时边界不会更改,并且事件不会被触发,因此标记错误。它会导致脚本忽略用户的下一个事件。这是我的代码:
var flag = false;
google.maps.event.addListener(map, 'idle', function() {
if(flag) {
// ignore this event
} else {
// do some work
}
flag = false;
});
function fitBounds() {
var bounds = new google.maps.LatLngBounds();
for(var i=0; i<markers.length; i++) {
var location = markers[i].getPosition();
bounds.extend(location);
}
// I need something like whether bounds will change or not after fitBounds?
flag = true;
map.fitBounds(bounds);
}
答案 0 :(得分:1)
您正在错误的位置将标记重置为false。试试这个:
google.maps.event.addListener(map, 'idle', function() {
if(flag) {
// ignore this event
flag = false; // reset to false here
return;
}
else {
// do some work
}
});
function fitBounds() {
flag = true;
// rest of the function....
}
除此之外,将听众添加到 bounds_changed 而不是空闲事件可能更好。
答案 1 :(得分:0)
我不确定,如果它可以工作,因为api有时会在计算边界时考虑控制(在地图的两侧),有时不会,但我认为值得一试:
if (!map.getBounds().contains(bounds.getNorthEast()) ||
!map.getBounds().contains(bounds.getSouthWest()))
{
flag = true;
map.fitBounds(bounds);
}