I do not speak English, sorry for the mistakes.
I’m using bootstrap, jquery, propeller.in and
I have the following code
var map, GeoMarker; function initialize() { var mapOptions = { zoom: 17, center: new google.maps.LatLng(-34.397, 150.644), mapTypeId: google.maps.MapTypeId.ROADMAP }; map = new google.maps.Map(document.getElementById('map_canvas'), mapOptions); GeoMarker = new GeolocationMarker(); GeoMarker.setCircleOptions({fillColor: '#808080'}); google.maps.event.addListenerOnce(GeoMarker, 'position_changed', function() { map.setCenter(this.getPosition()); map.fitBounds(this.getBounds()); }); google.maps.event.addListener(GeoMarker, 'geolocation_error', function(e) { alert('There was an error obtaining your position. Message: ' + e.message); }); GeoMarker.setMap(map); } google.maps.event.addDomListener(window, 'load', initialize); if(!navigator.geolocation) { alert('Your browser does not support geolocation'); }
<link href="https://propeller.in/assets/css/propeller.min.css" rel="stylesheet"/> <link href="https://propeller.in/assets/css/bootstrap.min.css" rel="stylesheet"/> <!DOCTYPE html> <html> <head> <title>Geolocation Marker Example Usage</title> <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"> <meta charset="utf-8"> <style> html, body, #map_canvas { margin: 0; padding: 0; height: 100%; } </style> </head> <body> <button data-target="#large-dialog" data-toggle="modal" class="btn pmd-ripple-effect btn-primary pmd-z-depth" type="button">Large Modal</button> <div tabindex="-1" class="modal fade" id="large-dialog" style="display: none;" aria-hidden="true"> <div class="modal-dialog modal-lg"> <div class="modal-content"> <div class="modal-header"> <button aria-hidden="true" data-dismiss="modal" class="close" type="button">×</button> <div class="modal-body"> <div id="map_canvas"></div><!-- no working --> </div> </div> </div> </div> </div> </body> <script src="https://propeller.in/assets/js/jquery-1.12.2.min.js"></script> <script src="https://propeller.in/assets/js/bootstrap.min.js"></script> <script src="https://propeller.in/assets/js/propeller.min.js"></script> <script src="https://maps.googleapis.com/maps/api/js"></script> <script src="https://chadkillingsworth.github.io/geolocation-marker/geolocation-marker.js"></script> <script> $('#large-dialog').on('shown.bs.modal', function (e) { initialize(); }); </script> </html>
The problem is that the map does not load inside the div, if I put out the modal content it works normally, I would like to find out how the map can be loaded inside a modal, with examples using what I already have
Advertisement
Answer
You need to bind the event shown.bs.modal
to execute the initialize
function:
$('#large-dialog').on('shown.bs.modal', function(e) {...}
And change the dimension of your div to something fixed. For this example, I’m setting 300px x 300px.
var map, GeoMarker; function initialize() { var mapOptions = { zoom: 17, center: new google.maps.LatLng(-34.397, 150.644), mapTypeId: google.maps.MapTypeId.ROADMAP }; map = new google.maps.Map(document.getElementById('map_canvas'), mapOptions); GeoMarker = new GeolocationMarker(); GeoMarker.setCircleOptions({ fillColor: '#808080' }); google.maps.event.addListenerOnce(GeoMarker, 'position_changed', function() { map.setCenter(this.getPosition()); map.fitBounds(this.getBounds()); }); google.maps.event.addListener(GeoMarker, 'geolocation_error', function(e) { alert('There was an error obtaining your position. Message: ' + e.message); }); GeoMarker.setMap(map); } google.maps.event.addDomListener(window, 'load', initialize); if (!navigator.geolocation) { alert('Your browser does not support geolocation'); } $('#large-dialog').on('shown.bs.modal', function(e) { initialize(); });
html, body, #map_canvas { margin: 0; padding: 0; height: 300px; width: 300px }
<link href="https://propeller.in/assets/css/propeller.min.css" rel="stylesheet" /> <link href="https://propeller.in/assets/css/bootstrap.min.css" rel="stylesheet" /> <script src="https://propeller.in/assets/js/jquery-1.12.2.min.js"></script> <script src="https://propeller.in/assets/js/bootstrap.min.js"></script> <script src="https://propeller.in/assets/js/propeller.min.js"></script> <script src="https://maps.googleapis.com/maps/api/js"></script> <script src="https://chadkillingsworth.github.io/geolocation-marker/geolocation-marker.js"></script> <button data-target="#large-dialog" data-toggle="modal" class="btn pmd-ripple-effect btn-primary pmd-z-depth" type="button">Large Modal</button> <div tabindex="-1" class="modal fade" id="large-dialog" style="display: none;" aria-hidden="true"> <div class="modal-dialog modal-lg"> <div class="modal-content"> <div class="modal-header"> <button aria-hidden="true" data-dismiss="modal" class="close" type="button">×</button> <div class="modal-body"> <div id="map_canvas"></div> <!-- no working --> </div> </div> </div> </div> </div>