Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Showing a Google Map in a modal created with Twitter Bootstrap

I'm trying to insert a Google map into a modal using Twitter Bootstrap. The modal shows up with the shape of the map present, but only part of the map is displayed, the rest is gray. Upon resizing the screen the map always shows up correctly, although centered in the wrong place.

I've searched and found suggestions such as calling the map's resize event, or setting the max-width of the map image to none, but none of these suggestions have helped so far. It seems like the map is failing to figure out it's correct size as long as it's in an element that's hidden.

JS

function initialize() {   var mapOptions = {     center: new google.maps.LatLng(51.219987, 4.396237),     zoom: 12,     mapTypeId: google.maps.MapTypeId.ROADMAP   };   var map = new google.maps.Map(document.getElementById("mapCanvas"),     mapOptions);   var marker = new google.maps.Marker({     position: new google.maps.LatLng(51.219987, 4.396237)   });   marker.setMap(map); } 

HTML

<div class="modal hide fade" id="myModal">   <div class="modal-header">     <button type="button" class="close" data-dismiss="modal">×</button>     <h3></h3>   </div>   <div class="modal-body">     <div id="mapCanvas" style="width: 500px; height: 400px"></div>   </div>   <div class="modal-footer">     <a href="#" class="btn" data-dismiss="modal">Close</a>   </div> </div> 

I'm using Twitter Bootstrap v2.0.4. I need some help because I'm failing to trigger the resize event correctly or editing the css so that the Google map is left alone.

like image 822
Eels Avatar asked Jul 31 '12 14:07

Eels


People also ask

How do I embed a Google map in HTML?

Embed a map or directionsClick Share or embed map. Click Embed map. Copy the text in the box. Paste it into the HTML of your website or blog.


1 Answers

Google Maps indeed displays "Grey" area's when it's placed inside a dynamic element (for example: One that resizes, fades etc.). You're right about triggering the "resize" function, which should be called once the animation is complete (the shown.bs.modal event in Bootstrap 3 or the shown event in Bootstrap 2):

$("#myModal").on("shown.bs.modal", function () {     google.maps.event.trigger(map, "resize"); }); 

In Bootstrap 2, you will do:

$('#myModal').on('shown', function () {     google.maps.event.trigger(map, "resize"); }); 

(where map is the variable name of your map (see Google Maps documentation for further details), and #myModal the ID from your element).

UPDATE 2018-05-22

With a new renderer release in version 3.32 of Maps JavaScript API the resize event is no longer a part of Map class.

The documentation states

When the map is resized, the map center is fixed

  • The full-screen control now preserves center.

  • There is no longer any need to trigger the resize event manually.

source: https://developers.google.com/maps/documentation/javascript/new-renderer

google.maps.event.trigger(map, "resize"); doesn't have any effect starting from version 3.32

like image 94
MarcoK Avatar answered Sep 23 '22 22:09

MarcoK