Sto semplicemente cercando di visualizzare una mappa di google all'interno di una pagina mobile jquery. Se carico la pagina direttamente, funziona. Tuttavia, se si naviga verso la pagina da un'altra pagina, viene visualizzata una sola tessera mappa. A prima vista sembrerebbe che il mio problema fosse simile a https://forum.jquery.com/topic/google-maps-inside-jquery-mobileJQuery Mobile e Google Maps non vengono visualizzati correttamente
Tuttavia, stavo già eseguendo la mia inizializzazione all'interno dell'evento 'pageinit' e il mio div di mappa ha una larghezza e altezza impostate.
Ho visto http://code.google.com/p/jquery-ui-map/ ma preferirei non utilizzare un (altro) plug-in di terze parti se possibile.
Ecco cosa mia pagina appare come:
<!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>
Grazie in anticipo per l'aiuto.
Aggiornamento:
Dopo qualche esperimento ho aggiunto il seguente ritardo al mio evento resize:
setTimeout(function() {
google.maps.event.trigger(map,'resize');
}, 500);
questo sembrava per risolvere il problema. Spero che questo aiuti qualcun altro.
funzione Timeout era esattamente la cosa che ho bisogno. Cheers –
Questo funziona in modo fantastico. Mentre sento che è abbastanza hackey, non ci sono molte opzioni qui.Il timeout funziona alla grande in quanto consente alla mappa di eseguire il rendering prima di chiamare questo per garantire un dimensionamento corretto. Il mio unico problema qui è come possiamo essere sicuri che 500 ms sono sufficienti? Un approccio di callback può funzionare meglio, come ad esempio ascoltare la mappa per attivare il suo evento "idle". Tuttavia, Idle non ha funzionato per me e non sono riuscito a trovare un altro evento appropriato da collegare. :( – Eric
setTimeout funziona great.thanks –