2012-03-24 19 views
7

google maps api v3ではポリゴンの描画が非同期であるようです。この例では、「読み込み」ボタンをクリックしてください:Googleマップapi v3でポリゴンの描画が完了したときのハンドル

http://jsfiddle.net/rmXXF/

テキスト「DONE」をはるかに早く、グリッドを描画するよりも書かれています!矩形グリッドの描画は非同期であるようです。 グリッドが描画された後、テキストDONEが表示されます。これにはいくつかのイベントハンドラがありますか?

コードの重要な部分は、関数action()である:マップをズーム/移動されていないため、「アイドル」イベントをマップ

polygons = draw_all_squares(map); // draw grid here 
document.getElementById('status').innerHTML = 'DONE'; // displayed 2 seconds 
                 // before the grid! 

注意が、このために動作しません。あなたはここで試すことができます: http://jsfiddle.net/92Hxj/

多分それはGoogleマップではなく、ブラウザのレンダリングと何かがありますか?いずれにしても、このためのイベントハンドラが存在するはずです。これはこの例に見られるように同じ内部Googleマップイベント・キューに追加される全てのポリゴンを描画した後にマップの小さなセンタリングをトリガすることによって

+0

残念ながらそこにはありません。ユースケースは何ですか? –

+1

@broadyでは、ユースケースはほとんどの場合、この例では見えますが、四角形にはajaxがロードされています。私はステータスインジケータを "LOADING ..."に設定しています.AJAXリクエストの前にデータを取得してレンダリングした後に "DONE"に戻しますが、動作しません。ステータスインジケータに "DONEユーザーは空のマップを数秒間見ます。 – TMS

答えて

8

http://jsfiddle.net/rmXXF/40/

google.maps.event.addListener(map, 'idle', function() { 
document.getElementById('status').innerHTML = 'DONE'; 
}); 

my_map.setCenter(new google.maps.LatLng(my_map.getCenter().lat(), my_map.getCenter().lng() + .000000001)); 
+0

デイヴィッド・ハック、ありがとう! – TMS

+2

とてもいいです、David。私は1つの変更を行うだろう - 使用addListenerOnce –

+0

華麗な仕事。 –

3

オーバーレイを使用して、描画マネージャーの「rectanglecomplete」イベントを聞く必要があります。私は昼食後の例を書くことができます。

Davidが正しいです。私はドキュメントを誤解しました。謝罪する彼は賞金を得るべきです。

+0

うわー、私が探していたものとまったく同じように見えます。例が素晴らしいだろう! – TMS

+0

すぐに報奨金を受け取る必要があります...あなたの答えが完了すれば、あなたはチャンスを逃すことはありません。 :-) – TMS

+0

あなたはまだ20時間あります。 – TMS

関連する問題