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 に答える