Как изменить размер карты Google с помощью JavaScript после ее загрузки?
105
У меня есть div 'mapwrap', установленный на 400px x 400px, и внутри у меня есть карта Google, установленная на 100% x 100%. Таким образом, карта загружается с размером 400 x 400 пикселей, затем с помощью JavaScript я изменяю размер 'mapwrap' до 100% x 100% экрана - размер карты Google изменяется на весь экран, как я ожидал, но плитки начинают исчезать до правого края экрана. страница.
Есть ли простая функция, которую я могу вызвать, чтобы заставить карту Google перенастроиться на div большего размера mapwrap?
Этот ответ был здесь долгое время, поэтому небольшая демонстрация может быть полезной, и хотя он использует 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;}
<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>
После этого вызова карта не меняла размер, пока я не обернул ее с помощью setTimeout. Я нашел это решение здесь (см. Комментарий № 46).
Тайлер Кольер
Этот ответ следует выбрать, учитывая, что v2 теперь устарела. @Tyler Collier, этот триггер события должен уведомить карту о том, что она должна перерисоваться. Возможно, вы изменяете размер скрытого контейнера, и в этом случае да, уменьшение и уменьшение масштаба будут работать по истечении времени ожидания.
Schien
8
Популярный ответ google.maps.event.trigger(map, "resize");не сработал для меня одного.
Это был трюк, который гарантировал, что страница загрузилась и карта тоже загрузилась. Установив слушателя и прослушивая состояние ожидания карты, вы можете затем вызвать триггер события для изменения размера.
Похоже, это для карт v2. Оригинальный плакат спрашивал о картах v3. Два API не кажутся совместимыми.
JoshuaD
Эта ссылка запускает обнаруженную угрозу.
intotecho
1
Это лучшее, что может сделать сделанную работу. Это изменит размер вашей карты. Больше не нужно проверять элемент, чтобы изменить размер карты. Что он делает, он автоматически запускает событие изменения размера.
Прежде всего, спасибо, что помогли мне и закрыли этот выпуск. Я нашел способ решить эту проблему из ваших обсуждений. Да, перейдем к делу. Дело в том, что я использую помощник GoogleMapHelper v3 в CakePHP3. Когда я попытался открыть модальное всплывающее окно начальной загрузки, меня поразила проблема с серым прямоугольником над картой. Он продлен на 2 дня. Наконец я исправил это.
Нам нужно обновить GoogleMapHelper, чтобы исправить проблему.
Необходимо добавить приведенный ниже скрипт в функцию setCenterMap
Популярный ответ
google.maps.event.trigger(map, "resize");
не сработал для меня одного.Это был трюк, который гарантировал, что страница загрузилась и карта тоже загрузилась. Установив слушателя и прослушивая состояние ожидания карты, вы можете затем вызвать триггер события для изменения размера.
Это был мой ответ, который помог мне.
источник
« Карта в коробке» Вольфганга Пихлера предлагает
источник
Это лучшее, что может сделать сделанную работу. Это изменит размер вашей карты. Больше не нужно проверять элемент, чтобы изменить размер карты. Что он делает, он автоматически запускает событие изменения размера.
источник
Прежде всего, спасибо, что помогли мне и закрыли этот выпуск. Я нашел способ решить эту проблему из ваших обсуждений. Да, перейдем к делу. Дело в том, что я использую помощник GoogleMapHelper v3 в CakePHP3. Когда я попытался открыть модальное всплывающее окно начальной загрузки, меня поразила проблема с серым прямоугольником над картой. Он продлен на 2 дня. Наконец я исправил это.
Нам нужно обновить GoogleMapHelper, чтобы исправить проблему.
Необходимо добавить приведенный ниже скрипт в функцию setCenterMap
И вам нужен приведенный ниже код в JavaScript
источник