簡體   English   中英

Google Maps API v3:是否有針對setMap()事件的回調或事件偵聽器?

[英]Google Maps API v3: Is there a callback or event listener for a setMap() event?

我在我正在開發的網站上使用Google Maps API v3。 我的地圖下方有一個下拉框,允許用戶在地圖上顯示的不同標記集之間切換。 使用marker.setMap()顯示每個標記。

我的問題是地圖有時需要很長時間來顯示新標記,尤其是在IE中。 我想在地圖切換標記時顯示“正在加載”動畫。 但我不知道如何檢測地圖何時完成顯示新數據(沒有頁面加載,因為這是所有AJAX)。 是否有setMap()事件的回調或事件監聽器,所以我可以調用一個函數來在最后一個標記完成加載時停止“加載”動畫?

似乎沒有setMap()的回調或事件監聽器,但我想出了一種方法來實現我想要的。 我正在使用jQuery加載Google Map。 這是我的代碼。

初始化地圖時,我為'idle'事件設置了一個監聽器,它隱藏了“加載”動畫。 滾動或縮放更改后,只要地圖完成重繪,就會觸發'idle'事件:

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

在我清除疊加層的功能中,我首先顯示加載動畫,然后使用setMap(null)清除每個標記。 然后我通過改變經度.000000001輕微地重新定位地圖。 這在所有setMap()調用之后發生,並觸發隱藏加載動畫的'idle'事件。

// 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 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM