7

私の質問はかなり簡単です。

google.maps.event.addListenerOnce(map, 'idle', function() {
    // code
});

このコード スニペットは、マップが現在ズームまたはパンでビジー状態になった後にトリガーされます。すでにアイドル状態のときではありません。

if文でキャンバスの状態を確認する方法はありますか? それで、すでにアイドル状態のときに// code、リスナーを追加せずに実行しますか?

4

2 に答える 2

5

マップのアイドル状態を通知する文書化されたプロパティはありませんが、独自に実装することができます。

マップの初期化の直後にこれを呼び出すと仮定します。

google.maps.event.addListener (map, 'idle', function(){
           this.lastBounds=this.getBounds();
}); 

次に、lastBounds-property がマップの現在の境界と等しいかどうかを確認できます。

if (map.lastBounds==map.getBounds()){
    //call function immediately
}else{
    //add listener
}
于 2013-02-05T02:33:54.940 に答える
1

受け入れられた回答の解決策は、v3 では機能しません。Map::getBounds メソッドは境界オブジェクト ファクトリを使用するため、呼び出しごとに新しいオブジェクトが返されます。したがって、最後の境界と比較すると、常に false が返されます。

回避策は、次のように代わりに「bounds_changed」イベントを使用することです。

var isIdle = false; // Initializing the idle flag before the map is created

var map = new google.maps.Map(/* Map initialization arguments */)

map.addListener('idle', function() {
    isIdle = true;
});
map.addListener('bounds_changed', function() {
    isIdle = false;
});

if(isIdle) {
    // Do the idle stuff
} else {
    map.addListenerOnce('idle', function() {
        // Do idle stuff
    });
}
于 2019-12-26T13:16:53.320 に答える