2013-08-25 9 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(); 
    } 
}); 

私が読んで、この上で読んで、何が実際に変化していない場合は発生しません再描画Google MapsのAPI v3.0のの奇妙があるようですしています。この場合、使用可能なウィンドウは画面幅 - メニューから実際のフルスクリーンに変更されます。しかし再描画は起こりません。

私はgoogle.maps.event.trigger(map、 'resize')を試しました。それはどちらもうまくいかない。

Googleマップを絶対に強制的に再描画する方法はありますか?

+0

私たちにリンクを教えてもらえますか? –

+0

右側のメニューの左上に小さなタブがあります。 –

+0

また、この変更によってズームが強制的に変更されるサイズにブラウザウィンドウを設定している場合は、ブラウザウィンドウが機能します。それが調整されないズーム変更が必要でないときだけです。私はまた、1段階のズームアウトとズームインを強制しましたが、それは修正されませんでした。 –

答えて

59

google.maps.event.trigger(MapInstance,'resize')は私にとってうまくいきます。機能の最初に入れてくださいfitMap

を現在(コードであなたのライブのコードでは、上記の投稿ではない)、あなたは各stepresizeWindowを呼び出す:あなたが不足している何

stepでこの関数を呼び出すと、の前に関数がと呼び出され、現在のステップのアニメーションが終了しています。その結果、resizeWindowは完全なアニメーションが終了したときには呼び出されない。地図の右側のマージン。

解決方法:animationcomplete -callbackでもresizeWindowを呼び出してください。

+0

ああ。ありがとう!私はテストの上にそこに置いたコードのコピーを忘れていました。私はすべての方法を試していた。しかしステップの前にステップ関数が呼び出されたことはわかりませんでした。 –

関連する問題