1

我正在使用谷歌地图 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);
}
4

2 回答 2

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而不是idle事件可能会更好。

于 2012-08-13T08:14:23.260 回答
0

我不确定它是否会像 api 一样工作,有时在计算边界时会考虑控制(在地图的两侧),有时不会,但我认为值得一试:

if (!map.getBounds().contains(bounds.getNorthEast()) ||
    !map.getBounds().contains(bounds.getSouthWest()))
{
    flag = true;
    map.fitBounds(bounds);
}
于 2012-08-13T07:51:05.213 回答