ロード後にJavaScriptでGoogleマップのサイズを変更するにはどうすればよいですか?


105

'mapwrap' divを400px x 400pxに設定し、その中にGoogle 'map'を100%x 100%に設定しています。したがって、地図は400 x 400pxで読み込まれ、JavaScriptを使用して「mapwrap」のサイズを画面の100%x 100%に変更します。Googleマップは予想どおり画面全体にサイズ変更されますが、タイルはページ。

Googleマップを大きなサイズの「mapwrap」divに再調整するために呼び出すことができる単純な関数はありますか?

回答:


28

Google Maps v2を使用している場合はcheckResize()、コンテナのサイズを変更した後で地図を呼び出します。 リンク

更新

Google Maps JavaScript API v2は2011年に廃止されました。これはもう使用できません。


323

Google Maps v3の場合、サイズ変更イベントを異なる方法でトリガーする必要があります。

google.maps.event.trigger(map, "resize");

resizeイベントのドキュメントを参照してください(「resize」という単語を検索する必要があります):http : //code.google.com/apis/maps/documentation/v3/reference.html#event


更新

この回答は古くからあるので、小さなデモは価値があるかもしれません。jQueryを使用していますが、実際にそうする必要はありません。

$(function() {
  var mapOptions = {
    zoom: 8,
    center: new google.maps.LatLng(-34.397, 150.644)
  };
  var map = new google.maps.Map($("#map-canvas")[0], mapOptions);

  // listen for the window resize event & trigger Google Maps to update too
  $(window).resize(function() {
    // (the 'map' here is the result of the created 'var map = ...' above)
    google.maps.event.trigger(map, "resize");
  });
});
html,
body {
  height: 100%;
}
#map-canvas {
  min-width: 200px;
  width: 50%;
  min-height: 200px;
  height: 80%;
  border: 1px solid blue;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maps.googleapis.com/maps/api/js?v=3.exp&dummy=.js"></script>
Google Maps resize demo
<div id="map-canvas"></div>

更新2018-05-22

Maps JavaScript APIのバージョン3.32の新しいレンダラーリリースでは、サイズ変更イベントはMapクラスの一部ではなくなりました。

ドキュメントには、

マップのサイズが変更されると、マップの中心が固定されます

  • 全画面コントロールで中央が保持されるようになりました。

  • サイズ変更イベントを手動でトリガーする必要がなくなりました。

ソース:https : //developers.google.com/maps/documentation/javascript/new-renderer

google.maps.event.trigger(map, "resize"); バージョン3.32以降、何の影響もありません


2
goMapを使用している人なら誰でも、Googleマップオブジェクトは$ .goMap.mapで入手できます
Adam Caviness

1
参照してくださいアンドリューヘッジすることで、この答えを:実装する方法のために
CrazyTim

これを呼び出した後、setTimeoutでラップするまで、マップのサイズは変更されません。ここでその解決策を見つけまし(コメント#46を参照)。
Tyler Collier、2015年

この回答は、v2が廃止されたことを考慮して選択する必要があります。@Tyler Collierこのイベントトリガーは、マップ自体に再描画する必要があることをマップに通知します。非表示のコンテナのサイズを変更している可能性があります。その場合、はい、ズームアウトとズームアウトはタイムアウトで機能します。
Schien

8

人気のある答えgoogle.maps.event.trigger(map, "resize");は私だけではうまくいきませんでした。

これは、ページが読み込まれ、マップも読み込まれたことを保証するトリックでした。リスナーを設定し、マップのアイドル状態をリッスンすることで、イベントトリガーを呼び出してサイズを変更できます。

$(document).ready(function() {
    google.maps.event.addListener(map, "idle", function(){
        google.maps.event.trigger(map, 'resize'); 
    });
}); 

これが私の答えでした。


2

Wolfgang Pichlerのmap-in-a-boxは、

ドラッグおよびサイズ変更可能なdiv要素にマップをロードします。


1
これはv2マップ用のようです。元のポスターはv3マップについて尋ねていました。2つのAPIは互換性がないようです。
JoshuaD 2011年

そのリンクにより、脅威が検出されます。
intotecho

1

これは、仕事を完了するのに最適です。マップのサイズが変更されます。マップのサイズを変更するために要素を検査する必要はもうありません。それが行うことは、自動的にサイズ変更イベントをトリガーします。

    google.maps.event.addListener(map, "idle", function()
        {
            google.maps.event.trigger(map, 'resize');
        });

        map_array[Next].setZoom( map.getZoom() - 1 );
    map_array[Next].setZoom( map.getZoom() + 1 );

0

まず、私を導き、この問題を閉じてくれてありがとう。私はあなたの議論からこの問題を修正する方法を見つけました。ええ、要点に入りましょう。問題は、CakePHP3でGoogleMapHelper v3ヘルパーを使用していることです。ブートストラップモーダルポップアップを開こうとすると、マップ上に灰色のボックスの問題が発生しました。2日間延長されました。最後に私はこれを修正しました。

問題を修正するには、GoogleMapHelperを更新する必要があります

以下のスクリプトをsetCenterMap関数に追加する必要があります

google.maps.event.trigger({$id}, \"resize\");

そして、JavaScriptのコードの下にインクルードが必要です

google.maps.event.addListenerOnce({$id}, 'idle', function(){
   setCenterMap(new google.maps.LatLng({$this->defaultLatitude}, 
   {$this->defaultLongitude}));
});
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.