1

Googleマップ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....
}

それとは別に、 idleイベントではなく、 bounds_changedにリスナーをアタッチする方がよい場合があります。

于 2012-08-13T08:14:23.260 に答える
0

I am not sure, if it would work as api sometimes takes controls (on the sides of the map) into account when calculating bounds and sometimes not, but I think it's worth a shot:

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