Jak zmienić rozmiar mapy Google za pomocą JavaScript po jej załadowaniu?
105
Mam div „mapwrap” ustawiony na 400px x 400px, a wewnątrz mam „mapę” Google ustawioną na 100% x 100%. Mapa wczytuje się w rozmiarze 400 x 400 pikseli, a następnie za pomocą JavaScript zmieniam rozmiar `` mapwrap '' na 100% x 100% ekranu - mapa google zmienia rozmiar na cały ekran, tak jak się spodziewałem, ale kafelki zaczynają znikać przed prawą krawędzią strona.
Czy istnieje prosta funkcja, którą mogę wywołać, aby spowodować ponowne dostosowanie mapy Google do większego rozmiaru div „mapwrap”?
Ta odpowiedź istnieje od dawna, więc małe demo może być warte zachodu i chociaż używa jQuery, nie ma takiej potrzeby.
$(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;}
<scriptsrc="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script><scriptsrc="https://maps.googleapis.com/maps/api/js?v=3.exp&dummy=.js"></script>
Google Maps resize demo
<divid="map-canvas"></div>
Mapa nie zmieniłaby rozmiaru po wywołaniu tego, dopóki nie zawinęłam jej za pomocą setTimeout. Znalazłem to rozwiązanie tutaj (patrz komentarz # 46).
Tyler Collier
Należy wybrać tę odpowiedź, biorąc pod uwagę, że wersja 2 jest obecnie przestarzała. @Tyler Collier to wyzwalacz zdarzenia ma na celu powiadomienie mapy, że musi się przemalować. Możliwe, że zmieniasz rozmiar ukrytego kontenera, w takim przypadku tak, pomniejszanie i przybliżanie działałoby po przekroczeniu limitu czasu.
Schien
8
Popularna odpowiedź google.maps.event.trigger(map, "resize");nie działała tylko dla mnie.
Oto sztuczka, która zapewniała załadowanie strony i mapy. Ustawiając nasłuchiwanie i nasłuchując stanu bezczynności mapy, można wywołać wyzwalacz zdarzenia w celu zmiany rozmiaru.
Wygląda na to, że dotyczy map v2. Oryginalny plakat pytał o mapy v3. Te dwa interfejsy API nie wydają się być zgodne.
JoshuaD
To łącze wyzwala wykryte zagrożenie.
intotecho
1
Najlepiej zrobi to, co wykonałeś. Spowoduje to zmianę rozmiaru mapy. Nie ma już potrzeby sprawdzania elementu, aby zmienić rozmiar mapy. To, co robi, automatycznie wywoła zdarzenie zmiany rozmiaru.
Przede wszystkim dziękuję za poprowadzenie mnie i zamknięcie tego numeru. Znalazłem sposób na rozwiązanie tego problemu na podstawie twoich dyskusji. Tak, przejdźmy do rzeczy. Chodzi o to, że używam pomocnika GoogleMapHelper v3 w CakePHP3. Kiedy próbowałem otworzyć wyskakujące okienko modalne bootstrap, uderzył mnie problem szarego pola na mapie. Został przedłużony o 2 dni. W końcu udało mi się to naprawić.
Musimy zaktualizować GoogleMapHelper, aby naprawić problem
Musisz dodać poniższy skrypt w funkcji setCenterMap
Popularna odpowiedź
google.maps.event.trigger(map, "resize");
nie działała tylko dla mnie.Oto sztuczka, która zapewniała załadowanie strony i mapy. Ustawiając nasłuchiwanie i nasłuchując stanu bezczynności mapy, można wywołać wyzwalacz zdarzenia w celu zmiany rozmiaru.
To była moja odpowiedź, która mi pomogła.
źródło
Mapa w pudełku Wolfganga Pichlera oferuje
źródło
Najlepiej zrobi to, co wykonałeś. Spowoduje to zmianę rozmiaru mapy. Nie ma już potrzeby sprawdzania elementu, aby zmienić rozmiar mapy. To, co robi, automatycznie wywoła zdarzenie zmiany rozmiaru.
źródło
Przede wszystkim dziękuję za poprowadzenie mnie i zamknięcie tego numeru. Znalazłem sposób na rozwiązanie tego problemu na podstawie twoich dyskusji. Tak, przejdźmy do rzeczy. Chodzi o to, że używam pomocnika GoogleMapHelper v3 w CakePHP3. Kiedy próbowałem otworzyć wyskakujące okienko modalne bootstrap, uderzył mnie problem szarego pola na mapie. Został przedłużony o 2 dni. W końcu udało mi się to naprawić.
Musimy zaktualizować GoogleMapHelper, aby naprawić problem
Musisz dodać poniższy skrypt w funkcji setCenterMap
I należy dołączyć poniższy kod w JavaScript
źródło