Simplemente estoy tratando de mostrar un mapa de Google dentro de una página de jquery mobile. Si cargo la página directamente, funciona. Sin embargo, si navego a la página desde otra página, solo muestra un solo mosaico de mapa. A primera vista, parecería que mi problema era similar al https://forum.jquery.com/topic/google-maps-inside-jquery-mobileJQuery Mobile y Google Maps no se reproducen correctamente
Sin embargo, ya estaba realizando mi inicialización dentro del evento 'pageinit' y mi mapa div tiene un ancho y una altura establecidos.
He visto http://code.google.com/p/jquery-ui-map/ pero prefiero no usar un (otro) complemento de terceros si es posible.
Aquí es lo que mi página se ve como:
<!DOCTYPE HTML>
<html>
<head>
<title>PhoneGap</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="cordova-1.6.1.js"></script>
<link rel="stylesheet" href="jquery.mobile-1.1.0.min.css" />
<script src="jquery-1.7.1.min.js"></script>
<script src="global.js"></script>
<script src="jquery.mobile-1.1.0.min.js"></script>
</head>
<body>
<div id="mapPage" data-role="page">
<style type="text/css">
html
{
height: 100%;
}
body
{
height: 100%;
margin: 0;
padding: 0;
}
#map_canvas
{
height: 100%;
}
</style>
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?key=***API_KEY_REMOVED***&sensor=true">
</script>
<script type="text/javascript">
function initialize() {
var height = $(window).height() - 50;
var width = $(window).width();
$("#map_canvas").height(height);
$("#map_canvas").width(width);
var myLatlng = new google.maps.LatLng(39.962799, -82.999802);
var myOptions = {
center: myLatlng,
zoom: 18,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map_canvas"),
myOptions);
//alert($(map.getDiv()).width());
var marker = new google.maps.Marker({
position: myLatlng,
map: map,
title: ""
});
google.maps.event.trigger(map, 'resize')
}
$("#mapPage").live('pageinit', function() {
initialize();
});
</script>
<div data-role="header" id="menuHeader">
<a href="MenuDialog.htm" class="menuLink" data-role="none" data-rel="dialog">
<img class="headerIcon" style="height: 40px; border-right: 1px solid #333333; padding-right: 5px;"
id="MenuIcon" src="images/menuIcon.png" /></a>
<p>
Loc
</p>
</div>
<div data-role="content">
<div id="map_canvas" style="margin-top: 50px;">
</div>
</div>
</body>
<html>
Gracias de antemano por su ayuda.
Actualización:
Después de un poco de experimentación añadí el siguiente retraso a mi evento de cambio de tamaño:
setTimeout(function() {
google.maps.event.trigger(map,'resize');
}, 500);
Esto parecía para solucionar el problema. Espero que esto ayude a alguien más.
función de tiempo de espera era exactamente lo que necesito. Cheers –
Esto funciona fantásticamente. Si bien creo que es bastante hackey, no hay muchas opciones aquí.El tiempo de espera funciona muy bien, ya que permite que el mapa se presente primero antes de llamar a esto para garantizar un tamaño adecuado. Mi único problema aquí es cómo podemos estar seguros de que 500 ms es suficiente. Un enfoque de devolución de llamada puede funcionar mejor, como escuchar que el mapa active su evento "inactivo". No obstante, Idle no funcionó para mí y no pude encontrar otro evento apropiado para conectar. :( – Eric
setTimeout funciona genial.gracias –