Support

Account

Home Forums Front-end Issues Google Maps does not load in a Bootstrap modal

Solving

Google Maps does not load in a Bootstrap modal

  • I’m new on the platform. I am French, and I translate this text with google translation.

    I have a problem with the initialization of Google Maps in my bootstrap modal (Bootstrap version 3.3.7)

    I’ve already covered topics and forums, and no solution worked.

    When you open the modal (click on the button), the maps appear in a gray box but do not load.

    When I change the size of my browser, it loads but is not centered.

    How to load the maps directly?

    <style type="text/css">
    
    .acf-map {
      width: 100%;
      height: 400px;
      border: #ccc solid 1px;
      margin: 20px 0;
    }
    
    /* fixes potential theme css conflict */
    .acf-map img {
       max-width: inherit !important;
    }
    
    </style>
    
    <script src="https://maps.googleapis.com/maps/api/js?key=#####"></script>
    <script type="text/javascript">
    
    (function($) {
    
    // popup is shown and map is not visible
    
    /*
    *  new_map
    *
    *  This function will render a Google Map onto the selected jQuery element
    *
    *  @type  function
    *  @date  8/11/2013
    *  @since 4.3.0
    *
    *  @param $el (jQuery element)
    *  @return  n/a
    */
    
    function new_map( $el ) {
    
      // var
      var $markers = $el.find('.marker');
    
      // vars
      var args = {
        zoom    : 16,
        center    : new google.maps.LatLng(0, 0),
        mapTypeId : google.maps.MapTypeId.ROADMAP
      };
    
      // create map           
      var map = new google.maps.Map( $el[0], args);
    
      // add a markers reference
      map.markers = [];
    
      // add markers
      $markers.each(function(){
    
          add_marker( $(this), map );
    
      });
    
      // center map
      center_map( map );
    
      // return
      return map;
    
    }
    
    /*
    *  add_marker
    *
    *  This function will add a marker to the selected Google Map
    *
    *  @type  function
    *  @date  8/11/2013
    *  @since 4.3.0
    *
    *  @param $marker (jQuery element)
    *  @param map (Google Map object)
    *  @return  n/a
    */
    
    function add_marker( $marker, map ) {
    
      // var
      var latlng = new google.maps.LatLng( $marker.attr('data-lat'), $marker.attr('data-lng') );
    
      // create marker
      var marker = new google.maps.Marker({
        position  : latlng,
        map     : map
      });
    
      // add to array
      map.markers.push( marker );
    
      // if marker contains HTML, add it to an infoWindow
      if( $marker.html() )
      {
        // create info window
        var infowindow = new google.maps.InfoWindow({
          content   : $marker.html()
        });
    
        // show info window when marker is clicked
        google.maps.event.addListener(marker, 'click', function() {
    
          infowindow.open( map, marker );
    
        });
      }
    
    }
    
    /*
    *  center_map
    *
    *  This function will center the map, showing all markers attached to this map
    *
    *  @type  function
    *  @date  8/11/2013
    *  @since 4.3.0
    *
    *  @param map (Google Map object)
    *  @return  n/a
    */
    
    function center_map( map ) {
    
      // vars
      var bounds = new google.maps.LatLngBounds();
    
      // loop through all markers and create bounds
      $.each( map.markers, function( i, marker ){
    
        var latlng = new google.maps.LatLng( marker.position.lat(), marker.position.lng() );
    
        bounds.extend( latlng );
    
      });
    
      // only 1 marker?
      if( map.markers.length == 1 )
      {
        // set center of map
          map.setCenter( bounds.getCenter() );
          map.setZoom( 16 );
      }
      else
      {
        // fit to bounds
        map.fitBounds( bounds );
      }
    }
    
    /*
    *  document ready
    *
    *  This function will render each map when the document is ready (page has loaded)
    *
    *  @type  function
    *  @date  8/11/2013
    *  @since 5.0.0
    *
    *  @param n/a
    *  @return  n/a
    */
    // global var
    var map = null;
    
    $(document).ready(function(){
    
      $('.acf-map').each(function(){
    
        // create map
        map = new_map( $(this) );
    
        // popup is shown and map is not visible
        google.maps.event.trigger(map, 'resize');
    
      });
    
    });
    
    })(jQuery);
    
    </script>

    And the integration of the modal bootstrap:

    <!-- MAPS -->
    
    <div class="col-md-6 txtmap">
    
        <div class="animated fadeInRightShort" data-id='4'>
            <button type="button" class="button button-icon btnprogramme big" data-toggle="modal" data-target="#gmaps">
              <i class="fa fa-map-marker"></i>Google Maps</a>
            </button>
        </div>
    
    </div>
    
    <!-- MODAL MAPS -->
    
    <div class="modal fade" id="gmaps" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
      <div class="modal-dialog" role="document">
        <div class="modal-content">
          <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
            <h4 class="modal-title" id="myModalLabel"><?php the_title(); ?> <span>- Google Maps</span></h4>
          </div>
          <div class="modal-body">
    
                <?php 
    
                $location = get_field('programme-maps');
    
                if( !empty($location) ):
                ?>
                <div class="acf-map">
                <div class="marker" data-lat="<?php echo $location['lat']; ?>" data-lng="<?php echo $location['lng']; ?>"></div>
                </div>
                <?php endif; ?>
    
          </div>
          <div class="modal-footer">
            <button type="button" class="button alt" data-dismiss="modal">Fermer</button>
          </div>
        </div>
      </div>
    </div>
    
  • Hello !

    Here is a screenshot of the result:

    Problem Google Maps Bootstrap

    And the map appears (but it is not centered) if I modify the window of my browser.
    When I look at the ACF documentation, he tells me to insert this code. But I do not know where …

    Solving the hidden map issue

    The Google map API will not work as expected if initialized on a hidden element. When the element is show, the map will not display. This scenario is most likely when using a popup modal.

    To solve this problem, simply trigger the ‘resize’ event on the map variable after the map element is visible.

    // popup is shown and map is not visible
    google.maps.event.trigger(map, 'resize');

    Thank you very much for your help !

  • I realize this is an old thread, but where specifically did you paste this code? It may fix an issue I’m having.

Viewing 3 posts - 1 through 3 (of 3 total)

The topic ‘Google Maps does not load in a Bootstrap modal’ is closed to new replies.