2016-03-02 2 views
14

У меня проблемы с картой google Я внедряю, я не понимаю, почему при загрузке карта не появляется и появляется только при изменении размера окна, я прошел различные решения в stackoverflow, но они не работают для меня.google map show после изменения размера экрана?

Вот мой JS код:

<script> 
function initMap() { 
     map = new google.maps.Map(document.getElementById('map'), { 
      center: {lat: 31.554606, lng: 74.357158}, 
      zoom: 14 
     }); 
google.maps.event.addListenerOnce(map, 'idle', function() { 
       google.maps.event.trigger(map, 'resize'); 
      }); 
     } 
</script> 

мой ДИВ

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

, когда я загрузить приложение это выглядит как enter image description here

и после того, как размер окна браузера вновь оказывается совершенно как это enter image description here

любезно скажите, как исправить эту проблему?

+0

http://stackoverflow.com/questions/12133318/google-maps-api-works-with-browser-inspect-element –

+0

https://code.google.com/p/gmaps-api-issues/issues/detail?id=1448 –

+0

$ ('# map'). on ('показано', функция() { \t google.maps.event.trigger (map, 'resize'); \t}); . \t $ ("# карта") нагрузка (функция() { \t \t console.log ("нагрузка hugya"); \t \t google.maps.event.addListenerOnce (карта, 'простаивает', функция() { \t \t google.maps.event.trigger (карта, 'изменить размер'); \t \t}); \t}); я попытался в обоих направлениях, но он не работал/ – Ahmad

ответ

8

вызов google.maps.event.trigger (карта, 'resize'), когда будет отображаться ваша «div id = map». См. How do I resize a Google Map with JavaScript after it has loaded?

+0

$ ('# map'). On ('показано', function() { \t google.maps.event.trigger (map, 'resize'); \t}); . \t $ ("# карта") нагрузка (функция() { \t \t console.log ("нагрузка hugya"); \t \t google.maps.event.addListenerOnce (карта, 'простаивает', функция() { \t \t google.maps.event.trigger (карта, 'изменить размер'); \t \t}); \t}); я попытался в обоих направлениях, но он не работал/ – Ahmad

+0

любезно предоставил мне соответствующий код, если я ошибаюсь. – Ahmad

+0

Вам нужно вызвать initMap после того, как ваш div будет виден (дисплей: блок) или вызовите google.maps.event. триггер (карта, «изменение размера») после того, как ваш div будет виден –

4

Установщик событий настроен на изменение размера, он должен быть установлен на нагрузку.

+0

Что значит bt, он должен быть установлен в onload? – Ahmad

4

Ничего не работало для меня. Для загрузки карты я использовал поле «Модель» в Bootstrap. Я пробовал все в течение нескольких часов. Каждый раз, когда я загружал карту, я видел серый квадрат, но как только я изменил размер браузера, он отобразил бы карту. Казалось, что требуется изменить размер окна. Поэтому я включил все функциональные возможности карты в функцию initmap2() и отобразил в ней свежую карту. и при нажатии я использовал

setTimeout(initMap2, 200); 

Так как только модальное окно откроется, он будет отображать карту, и я пытался работать волю 100 milliseconds, но я предполагаю, что это работает с 200+ milliseconds, так что я держал 500ms просто, чтобы быть безопасным.

Я надеюсь, что это помогает

+0

Да, я использую эту , слишком. Лучше, чем ничего! – nights

2

Я нашел, что это работает только после того, как объединить две вещи: SetTimeout и Google изменить размер.

Так, в конце initMap я установил:

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

И создать SetTimeout для initMap вроде этого:

$(document).ready(function(){ 
    setTimeout(initMap, 1000); 
}); 

- Редактировать

Чтобы ответить @ LucaC .: my initMap - это отдельный js, который я связываю с страницами. Решение выше определено в этом js (только setTimeout).

Но через некоторое время я заметил, что эта проблема все еще происходит с мобильными устройствами.

Работа вокруг: держать SetTimeout для initMap и на странице я загрузить карту, я создал

$(window).load(function(){ 
setTimeout(function(){ 
    google.maps.event.trigger(map, "resize"); 
}, 250); 
}); 

Итак: я) отложить что-нибудь, что сломать карту; ii) в конце концов, измените размер карты после загрузки страницы :)

+0

где вы положили setTimeout? –

+0

Я отредактировал свой ответ :) –

Смежные вопросы