Skip to content
Advertisement

Location Marke disappears when closing modal

I do not speak English, sorry for the mistakes.

I’m using bootstrap, jquery, propeller.in and

https://github.com/ChadKillingsworth/geolocation-marker

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>
User contributions licensed under: CC BY-SA
7 People found this is helpful
Advertisement