Google Maps API V3:setMap()イベントにコールバックまたはイベントリスナーはありますか?
-
27-09-2019 - |
質問
私が開発している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);
}
ちょっとしたハックですが、他の誰かがこれが便利だと思うことを願っています。