Google Maps API V3:setMap()イベントにコールバックまたはイベントリスナーはありますか?

StackOverflow https://stackoverflow.com/questions/3461246

質問

私が開発しているWebサイトでGoogle Maps API V3を使用しています。マップの下にドロップダウンボックスがあり、ユーザーがマップに異なるマーカーのセットを切り替えることができます。各マーカーは使用して表示されます marker.setMap().

私の問題は、特にIEで、新しいマーカーを表示するのに長い時間がかかることがあることです。マップがマーカーを切り替えている間に、「ロード」アニメーションを表示したいと思います。しかし、マップが新しいデータの表示が完了した時期を検出する方法がわかりません(これはすべてAjaxであるため、ページの負荷はありません)。のコールバックまたはイベントリスナーはありますか setMap() イベントなので、最後のマーカーがロードが終了したときに「ロード」アニメーションを停止するために関数を呼び出すことができますか?

役に立ちましたか?

解決

setMap()のコールバックやイベントリスナーはないようですが、私が望むものを達成する方法を見つけました。 jqueryを使用してGoogleマップをロードしています。これが私のコードです。

マップを初期化するとき、「アイドル」イベントのリスナーを設定します。これは、「ロード」アニメーションを隠します。 「アイドル」イベントは、スクロールまたはズームの変更後にマップが再描画されたときにトリガーされます。

google.maps.event.addListener(this.map, 'idle', function() {
 $('#loading').hide();
});

また、オーバーレイをクリアするための私の関数では、最初にロードアニメーションを表示し、次にsetMap(null)を使用して各マーカーをクリアします。その後、経度を.000000001で変更することにより、マップをわずかに最近に最近にします。これは、すべてのsetMap()呼び出しの後に発生し、ロードアニメーションを隠す「アイドル」イベントをトリガーします。

// clear overlays from the map
function clearOverlays() {
 $('#loading').show();

 // clear the markers from the active data array
 if (activeData) {
  for (i in activeData) { activeData[i].setMap(null); }
 }
 activeData = '';

 // very slightly recenter the map to trigger the 'idle' event
 var centerlat = MYMAP.map.getCenter().lat();
 var centerlng = MYMAP.map.getCenter().lng() + .000000001;
 recenter = new google.maps.LatLng(centerlat, centerlng);
 MYMAP.map.setCenter(recenter);
}

ちょっとしたハックですが、他の誰かがこれが便利だと思うことを願っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top