JavaScript yüklendikten sonra bir Google Haritasını nasıl yeniden boyutlandırabilirim?


105

400px x 400px olarak ayarlanmış bir "mapwrap" div var ve bunun içinde% 100 x% 100 olarak ayarlanmış bir Google "haritam" var. Bu yüzden harita 400 x 400 piksel boyutunda yükleniyor, ardından JavaScript ile 'mapwrap'ı ekranın% 100 x% 100'üne yeniden boyutlandırıyorum - google haritası beklediğim gibi tüm ekrana yeniden boyutlandırılıyor, ancak döşemeler ekranın sağ kenarından önce kaybolmaya başlıyor sayfa.

Google haritasının daha büyük 'mapwrap' div boyutuna yeniden ayarlanmasını sağlamak için arayabileceğim basit bir işlev var mı?

Yanıtlar:


28

Google Haritalar v2 kullanıyorsanız checkResize(), kapsayıcıyı yeniden boyutlandırdıktan sonra haritanızdan arayın . bağlantı

GÜNCELLEME

Google Maps JavaScript API v2, 2011'de kullanımdan kaldırıldı. Artık mevcut değil.


323

Google Haritalar v3 için yeniden boyutlandırma etkinliğini farklı şekilde tetiklemeniz gerekir:

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

Yeniden boyutlandırma etkinliğinin belgelerine bakın ('yeniden boyutlandır' kelimesini aramanız gerekir): http://code.google.com/apis/maps/documentation/v3/reference.html#event


Güncelleme

Bu cevap uzun zamandır burada, bu yüzden küçük bir demo faydalı olabilir ve jQuery kullanmasına rağmen, buna gerçekten gerek yok.

$(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>

GÜNCELLEME 2018-05-22

Haritalar JavaScript API'sinin 3.32 sürümündeki yeni bir oluşturucu sürümüyle yeniden boyutlandırma etkinliği artık Mapsınıfın bir parçası değildir .

Dokümantasyon durumları

Harita yeniden boyutlandırıldığında, harita merkezi sabitlenir

  • Tam ekran kontrolü artık merkezi koruyor.

  • Artık yeniden boyutlandırma olayını manuel olarak tetiklemeye gerek yoktur.

kaynak: https://developers.google.com/maps/documentation/javascript/new-renderer

google.maps.event.trigger(map, "resize"); 3.32 sürümünden itibaren herhangi bir etkisi yoktur.


2
GoMap kullanan herkes için, google harita nesnesinin $ .goMap.map adresinde mevcut olduğunu unutmayın
Adam Caviness

1
Uygulamanın bir yolu için Andrew Hedges'in bu cevabına bakın :
CrazyTim

Bunu bir setTimeout ile sarmadan sonra harita yeniden boyutlandırılmıyordu. Bu çözümü burada buldum (46 numaralı yoruma bakın).
Tyler Collier

Bu yanıt, v2'nin artık kullanımdan kaldırıldığı dikkate alınarak seçilmelidir. @Tyler Collier bu olay tetikleyicisi, haritayı kendisini yeniden boyaması gerektiğini bildirmektir. Gizli bir kapsayıcıyı yeniden boyutlandırmanız mümkündür, bu durumda evet, uzaklaştırma ve yakınlaştırma zaman aşımıyla sonuçlanır.
Schien

8

Popüler cevap google.maps.event.trigger(map, "resize");benim için tek başına işe yaramadı.

İşte sayfanın yüklendiğini ve haritanın da yüklendiğini garanti eden bir numara. Bir dinleyici ayarlayarak ve haritanın boşta durumunu dinleyerek, yeniden boyutlandırmak için olay tetikleyicisini çağırabilirsiniz.

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

Bu benim için işe yarayan cevabımdı.



1

Yapılan İşi yapması en iyisi budur. Haritanızı yeniden boyutlandıracak. Artık Haritanızı yeniden boyutlandırmak için öğeyi incelemenize gerek yok. Yaptığı şey, yeniden boyutlandırma olayını otomatik olarak tetikleyecektir.

    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

Öncelikle bana rehberlik ettiğiniz ve bu konuyu kapattığınız için teşekkürler. Bu sorunu tartışmalarınızdan çözmenin bir yolunu buldum. Evet, noktaya gelelim. Sorun şu ki CakePHP3'te GoogleMapHelper v3 yardımcısını kullanıyorum. Önyükleme kalıcı açılır penceresini açmaya çalıştığımda, harita üzerinde gri kutu sorunu ile karşılaştım. 2 gün uzatıldı. Sonunda bunu düzelttim.

Sorunu düzeltmek için GoogleMapHelper'ı güncellememiz gerekiyor

SetCenterMap fonksiyonuna aşağıdaki betiği eklemeniz gerekir

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

Ve JavaScript'e aşağıdaki kodu dahil etmelisiniz

google.maps.event.addListenerOnce({$id}, 'idle', function(){
   setCenterMap(new google.maps.LatLng({$this->defaultLatitude}, 
   {$this->defaultLongitude}));
});
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.