Не удается загрузить API JavaScript Карт Google в Bootstrap Modal

У меня возникают проблемы с загрузкой API Карт Google во всплывающем модальном окне.

HTML:

<div class="portfolio-modal modal fade" id="portfolioModal3" tabindex="-1" role="dialog" aria-hidden="true">
    <div class="modal-content">
        <div class="close-modal" data-dismiss="modal">
            <div class="lr">
                <div class="rl">
                </div>
            </div>
        </div>
        <div class="container">
            <div class="row">
                <div class="col-lg-8 col-lg-offset-2">
                    <div class="modal-body">
                        <h2>Warehousing</h2>
                        <p class="item-intro text-muted"></p>
                        <div id="warehouse-map-canvas"></div>
                        <p class="item-description">Short description</p> <p class="item-description">Short description</p>
                        <button type="button" class="btn btn-primary" data-dismiss="modal"><i class="fa fa-times"></i> Close Project</button>
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>

JavaScript:

<script>
    var map;
    function initialize() {
        var center = new google.maps.LatLng(41, -87);
        var mapOptions = {
          center: center,
          zoom: 14,
          mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        var mapCanvas = document.getElementById('warehouse-map-canvas');
        map = new google.maps.Map(mapCanvas, mapOptions);

        var marker = new google.maps.Marker({
            position: center,
            map: map,
            title: 'Warehouse'
        });

        /*google.maps.event.addListenerOnce(map, 'idle', function() {
           google.maps.event.trigger(map, 'resize');
           map.setCenter(center);

           This bit of code seems to do nothing for me.
        });*/
    }

    google.maps.event.addDomListener(window, 'load', initialize);
</script>

Что происходит, я нажимаю и вызываю всплывающее модальное окно, и пространство div карты заполняется отображением элементов карт Google, таких как панель масштабирования, значок просмотра улиц и т. Д. Однако область карты внутри серого цвета.

Вы можете прокручивать, масштабировать и иным образом панорамировать, но это не повлияет на карту. Маркер карты появляется, когда он находится в верхнем левом углу экрана, но находится на сером море.

РЕШЕНИЕ:

Используя эти модальные js и css начальной загрузки (https://github.com/jschr/bootstrap-modal ) Мне удалось обновить карту следующим образом:

$('#portfolioModal3').on('shown', function () {
   google.maps.event.trigger(map, 'resize');
   map.setCenter(new google.maps.LatLng(41, -87));
});

после google.maps.event.addDomListener (окно, «загрузка», инициализация);


person TheEnigmaThatIsMe    schedule 22.06.2015    source источник


Ответы (2)


Когда карта построена, она измеряет родительские размеры для правильного заполнения.

Когда вы инициализируете страницу с google.maps.event.addDomListener(window, 'load', initialize);, ваше модальное окно еще не создано, поэтому, когда вы его показываете, размеры неверны.

Чтобы этого избежать, вам нужно инициализировать карту только тогда, когда вы хотите показать модальное окно:

$('#portfolioModal3').on('shown.bs.modal', function() {
    initialize();
});
person Thibault Henry    schedule 22.06.2015
comment
Куда бы я это положил? В сценарии вверху? Я пробовал этот аналогичный метод раньше и не мог его загрузить. - person TheEnigmaThatIsMe; 22.06.2015
comment
В любом месте после загрузки jquery, карты Google и скрипта начальной загрузки. Используйте $ (function () {...}); чтобы убедиться, что ваш скрипт загружен. - person Thibault Henry; 22.06.2015
comment
Я пробовал это в измененной строке //google.maps.event.addDomListener(window, 'load', initialize); с модальным окном, просто загружая div с серым фоном из CSS. - person TheEnigmaThatIsMe; 22.06.2015
comment
У вас есть ошибка в консоли? Мы можем увидеть эту страницу? - person Thibault Henry; 22.06.2015
comment
Единственная ошибка консоли, которую я получаю, заключается в том, что $ не определено для этой строки, которую нужно добавить. В настоящее время я использую скобки, чтобы увидеть макет HTML и CSS. - person TheEnigmaThatIsMe; 22.06.2015
comment
$ не определено? У вас нет jQuery? - person Thibault Henry; 22.06.2015
comment
Я разместил ссылку на возникшую у меня проблему, просто зайдите в раздел склад. - person TheEnigmaThatIsMe; 22.06.2015
comment
jquery еще не загружен ... используйте document.addEventListener ('onload', function () {$ (function () {...})}) - person Thibault Henry; 23.06.2015

Я предполагаю, что вы используете координаты 41.xxxx и -87.xxxx, что вызывает ошибку SyntaxError. В противном случае код работает нормально, как только я загружаю Google Maps JavaScript API и заменяю координаты на 41.0, -87.0.

person bloomark    schedule 22.06.2015
comment
Xxx предназначен для сокрытия местоположения. Конечно сработает ... Вы не загрузили сам модальный файл. - person Thibault Henry; 22.06.2015
comment
На самом деле я использую все значения, как вы упомянули, вместо xxxx. Карта работает, только когда изменяется размер модального окна. - person TheEnigmaThatIsMe; 22.06.2015