ブラウザのリサイズ時にGoogleマップ(V3)を中央に配置(レスポンシブ)


124

ページにGoogleマップ(V3)があり、中央に1つのマーカーがあり、ページ幅が100%です。ブラウザウィンドウの幅のサイズを変更するときに、マップを中央に配置したままにします(応答)。これで、マップはページの左側にとどまり、小さくなります。

更新ダンカンのおかげで、説明どおりに機能するようになりました。これが最終的なコードです:

var center;
function calculateCenter() {
  center = map.getCenter();
}
google.maps.event.addDomListener(map, 'idle', function() {
  calculateCenter();
});
google.maps.event.addDomListener(window, 'resize', function() {
  map.setCenter(center);
});

1
よくやった!はい、現在の中心値をグローバルスコープに継続的に出力して、domリスナーがピックアップできるようにする必要があります
efwjames

トップに行く場合は、このようにしてくださいcenter。グローバルである必要はありません。提供center(およびcalculateCenter)はと同じスコープ内にmapあり、すべてが機能するはずです。もちろん、mapグローバルな場合は修正する必要もあります:)
Roamer-1888

多分それは明白ですが、このコードはマップがロードされた後に来るため、少なくともwindows.onload上にある必要があります
Victoria Ruiz

おかげで、これはデフォルトのグーグルマップの動作になるはずです
ユクレレ

回答:


143

ウィンドウのサイズが変更されたときのイベントリスナーが必要です。これは私のために働きました(あなたの初期化関数に入れてください):

google.maps.event.addDomListener(window, 'resize', function() {
    map.setCenter(center);
});

これは完璧に機能します、ありがとう!しかし、誰かがマップを移動した場合、マップの新しい中心を取得するにはどうすればよいですか?getCenter()関数を見つけましたが、正しく機能しません。map.setCenter(map.getCenter()); 動作しません。
Gregory Bolkenstijn、2012年

別のイベントリスナーが必要です。マップオブジェクトの「center_changed」の場合、グローバル変数を新しい座標で更新します。これは、setCenterで使用できます。
ダンカン

1
私も試しました: var center; google.maps.event.addListener(map, 'center_changed', function() { center = map.getCenter(); }); google.maps.event.addDomListener(window, 'resize', function() { map.setCenter(center); }); 機能しません。任意の助けいただければ幸いです。
Gregory Bolkenstijn、2012年

代わりに「bounds_changed」はどうですか?
ダンカン

49
これは最も簡単な方法です:hsmoore.com/blog/...
AO_

83

ブラウザーのサイズ変更イベントを検出し、中心点を維持しながらGoogleマップのサイズを変更します。

var map = ...; // your map initialisation code

google.maps.event.addDomListener(window, "resize", function() {
    var center = map.getCenter();
    google.maps.event.trigger(map, "resize");
    map.setCenter(center); 
});

他の方法で(たとえば、jQuery-UIの「サイズ変更可能」コントロールを使用して)Googleマップのサイズを変更する場合、他のイベントハンドラーで同じコードを使用できます。

出典:http : //hsmoore.com/blog/keep-google-map-v3-centered-when-browser-is-resized/リンクの@smftreへのクレジット

注:このコードは、承認された回答に関する@smftreのコメントにリンクされていました。受け入れられた回答よりも優れているため、独自の回答として追加する価値はあると思います。これにより、中心点を追跡するグローバル変数とその変数を更新するイベントハンドラーの必要がなくなります。


@Williamに同意します。この方法を使用すると、マップのサイズが変更されたときに中心位置がより正確になります。
10階

受け入れ答えが正しく動作していませんでした、これはトリックでした
トム・

これは最良で実用的なソリューションです。すべてのウィンドウのサイズ変更イベントで機能します。他の解決策は適切に機能しませんでした。
zdarsky.peter 2014

1
これは本当にコミュニティウィキとして投稿されているはずです。
gustavohenke 2015年

動作しますが、もっと理解したいです。正確には何をしgoogle.maps.event.trigger(map, "resize");ますか?
メデューズ


0

html:選択したIDでdivを作成します

<div id="map"></div>

js:マップを作成し、作成したdivに添付します

var map = new google.maps.Map(document.getElementById('map'), {
    zoom: 16,
    center: new google.maps.LatLng(-33.890542, 151.274856)
});

ウィンドウのサイズ変更時に中央揃え

var center = map.getCenter();

google.maps.event.addDomListener(window, 'resize', function() {
    map.setCenter(center);
});

0

上記のソリューションをes6に更新しました。

let center;
const addMapListener = google.maps.event.addDomListener;

addMapListener(map, 'idle', () => center = map.getCenter());
addMapListener(window, 'resize', () => map.setCenter(center));

DOM要素であると、そうでないのaddDomListener両方にを使用しています。マップオブジェクトは、または独自のイベントハンドラを使用する必要があります。windowmapgoogle.maps.event.addListenermap.addListener
ダンカン2017年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.