2013-08-25 61 views
26

我有一個相當複雜的地圖應用程序處理多個自定義標記等。我有一個名爲resizeWindow的函數,我在監聽器中調用,當屏幕更改時,地圖通過計算新邊界和強制調整大小來重繪本身。它看起來像這樣:如何強制重繪Google Maps API v3.0?

window.onresize = function(event) { fitmap(); }; 

和調整功能:

function fitmap(id) { 
    var coords = []; 
    var newlatlng = new google.maps.LatLng(projlat, projlng); 
    coords.push(newlatlng); 

     for (var i=0; i<markers[id].length; i++) { 
      newlatlng = new google.maps.LatLng(markers[id][i].latitude, markers[id][i].longitude); 
      coords.push(newlatlng); 
     } 
    } 

    var bounds = new google.maps.LatLngBounds(); 
    for (var i = 0, LtLgLen = coords.length; i < LtLgLen; i++) { 
     bounds.extend (coords[i]); 
    } 
    map.fitBounds(bounds); 

,當我真正調整窗口,這個偉大工程。但...

我有一個菜單沿着窗口的右側。我使用jquery.animate將該菜單移出屏幕。我將fitmap函數稱爲步驟過程(或者最後一次),它不會重繪地圖。

$('#rightSide').animate({ right:"-240px" }, { 
    duration:1000, 
    step: function(now,fx) { 
     fitmap(); 
    } 
}); 

我已閱讀並在此閱讀,似乎有重畫如果沒有實際改變不會發生,谷歌地圖API 3.0的一個怪胎。在這種情況下,我的可用窗口從屏幕寬度 - 菜單變爲實際的全屏。但沒有重繪發生。

我試過google.maps.event.trigger(map,'resize');那也行不通。

有沒有辦法絕對強制Google地圖重繪?

+0

你能給我們一個鏈接嗎? –

+0

右側菜單左上角有一個小標籤。 –

+0

此外,如果您將瀏覽器窗口設置爲此更改強制縮放更改的大小,則該窗口可以正常工作。只有在不需要變焦時才需要調整。我也嘗試強制1步縮小和放大,但沒有解決它。 –

回答

59

google.maps.event.trigger(MapInstance,'resize')對我來說工作正常,把它放在函數fitMap的開頭。

你缺少什麼:

目前(未在上面貼在你的活代碼的代碼),您在每個step調用resizeWindow

當您在step上調用此函數時,該函數將在之前調用,當前步驟的動畫已完成。結果是resizeWindow在完成動畫完成時將不會被調用,例如,地圖右側的邊距。

解決方案:請致電resizeWindowcomplete回調animation

+0

啊。謝謝!我已經忘記了我在測試中放哪個代碼副本。我正在嘗試各種方法。但是我不知道step之前的step函數。 –