2014-06-05 72 views
4

我正在使用帶有標記設置的Google地圖在地圖上顯示地點。我正在使用idle事件來確定何時提交新數據請求,以便當用戶平移或縮放地圖時,將調用ajax服務並更新標記以在新視口中查找位置。停止Google Maps API v3中的閒置事件

問題是,當用戶點擊某個標記以彈出infowindow時,地圖會經常略微移動以集中infowindow--觸發另一個idle事件並重置地圖,關閉infowindow。

對此有最佳做法嗎?有沒有辦法在infowindow打開時禁用idle偵聽器,或者是否有標準的解決方法?

+0

嘗試使用infowindow選項'disableAutoPan:true':*禁用自動平移打開。默認情況下,信息窗口會平移地圖,使其在打開時完全可見。* –

+1

@AntoJurković--謝謝 - 這是一個很好的想法,但用戶很可能會自己去看看整個infowindow,所以問題重演。我想我需要一些方法來禁用「閒置」事件,如果infowindow處於打開狀態,或者採用某種解決方法。 – user101289

回答

0

我有類似的問題,我的谷歌地圖,在這裏是我的解決辦法....

在我呼籲標記,我下載點超出視口。例如.... 如果我的N約束緯度是85和我的S約束是88,我會拉在83和90緯度之間的點。

viewportN = 85; 
viewportS = 88; 
searchBoundN = 83; 
searchBoundS = 90; 

當你點擊該標記時,它自動鍋,你讓你的北行現在是84.你把一個if語句在你的空閒功能,上面寫着:

map.addListener("idle", function() { 
     //get map viewport bounds 
     ..... 
     // check if you're in territory that doesn't have markers 
     if (viewPortN < searchBoundN || viewportS > searchBoundS || <<repeat for E, W>>) { 
      refreshMarkers(); 
     } 
}); 

應該解決你的問題。它會告訴您的腳本只在大動作後刷新標記。 我有我的地圖從視口區域的兩倍拉出標記,以確保安全。它還使您的數據免受小盤的刷新,這將降低對服務器的請求數量。

0

我有同樣的問題,因爲我沒有太多的前端開發經驗,我試圖啓用實際的搜索和填充標記,如果只有事件來自用戶交互,如「拖動」或「縮放更改'事件。

起初,我尋找一種方法來找出在閒置事件中是否有任何內置屬性或標誌,並且它沒有。然後我爲自己做了一個。

因爲那些事件在'空閒'事件發生之前就被觸發了,所以我在這些事件中設置了一個標誌(我知道這不是最佳實踐),在'idle'事件中我檢查'isUserInteraction'標誌是否爲真標記將起作用。