2010-12-02 5 views
46

マーカー付きのGoogleマップがあります。私は自分のマーカーがGoogleマップのイベントbounds_changedがドラッグ時に複数回トリガーされました

Googleがそのためのイベントbounds_changedを使用することをお勧めしますが、私はマップを移動すると、イベントは、私が移動する画素ごとにトリガーされる...マップがズーム/移動したときにリフレッシュさせたいです地図。ユーザーが地図の移動を停止したとき、つまりドラッグした後にマウスボタンを放したときにのみ地図を更新することをおすすめします。

どうすればいいですか?

おかげ

答えて

95

dragendイベント:http://code.google.com/p/gmaps-api-issues/issues/detail?id=1371

Googleチームはイベント「アイドル」を使用することをおすすめします。たとえば:

google.maps.event.addListener(map, 'idle', function() { 
}); 
+0

アイドル状態の開始から2秒後にカスタムマップアップ機能を起動するように設定するにはどうすればよいですか? – goseo

1

は両方がzoom_changed使用して試してみて、それが報告されたバグだっ判明

+0

それは間違いなくzoomchangeとdragendイベントで完璧に動作しますが、idは動作しませんがコントロール。 – yadavr

+0

これを行うと、キーボードで地図をパンするユーザーが不足しますので注意してください。 – Brad

3

は、イベントが発生した後、あなたのコードの500msを実行し、タイムアウトを追加し、毎回イベントが発生するタイムアウトをクリアし、新しいものを作成します。

google.maps.event.addListener(map, 'bounds_changed', (function() { 
 
    var timer; 
 
    return function() { 
 
     clearTimeout(timer); 
 
     timer = setTimeout(function() { 
 
      // here goes an ajax call 
 
     }, 500); 
 
    } 
 
}()));

+1

あなたは受け入れられた答えをお読みくださいでしたか?同じことをしていますが、簡単です。 –

+0

はい。受け入れられた答えは私が言うより良いアプローチです! –

10

選択答えは、ほとんどの環境のための最良のですが。自分で遅延をコントロールしたい場合は、単純に次のようなものを使用できます。ここで

var mapupdater; 

{....} 

google.maps.event.addListener(map, "bounds_changed", mapSettleTime); 


function mapSettleTime() { 
    clearTimeout(mapupdater); 
    mapupdater=setTimeout(getMapMarkers,500); 
} 
0

コールの「bound_changed」すべての冗長を削除します少し抜粋です:私たちはパンを使用してマップを移動するとき

var timeout; 
google.maps.event.addListener(map, 'bounds_changed', function() { 
window.clearTimeout(timeout); 
timeout = window.setTimeout(function() { 
    //do stuff on event 
    }, 500); 
}); //time in ms, that will reset if next 'bounds_changed' call is send, otherwise code will be executed after that time is up 
関連する問題