我只是想在jquery移动页面中显示谷歌地图。如果我直接加载页面就可以了。但是,如果我从另一个页面导航到该页面,它只渲染一个地图图块。乍一看,我的问题似乎与https://forum.jquery.com/topic/google-maps-inside-jquery-mobile
相似但是,我已经在'pageinit'事件中执行初始化,而我的map div有一个设置的宽度和高度。
我见过http://code.google.com/p/jquery-ui-map/但我宁愿不使用(另一个)第三方插件,如果可能的话。
这是我的页面的样子:
<!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>
先谢谢你的帮助。
更新
经过一些实验后,我将以下延迟添加到我的resize事件中:
setTimeout(function() {
google.maps.event.trigger(map,'resize');
}, 500);
这似乎解决了这个问题。希望这有助于其他人。
答案 0 :(得分:13)
我在网站上看到,如果您遇到此问题,那么当您初始化Google地图时,dom并未完全加载。 您必须在代码中添加:
$( document ).bind( "pageshow", function( event, data ){
google.maps.event.trigger(map, 'resize');
});
它对我有用。
,在你展示的每个页面调整大小可能是残酷的答案 1 :(得分:4)
您的<html>
和<body>
大小为100%,而<div>
和<body>
之间的层次结构中不是<div id="map_canvas">
。
尝试将这些内容添加到CSS中(content
需要id
)。
您可能还需要通过在所有内容都准备就绪时触发<div>
事件来确保API知道地图resize
的大小。仅显示单个图块是API出错的典型症状(通常假设它的大小为零)。
答案 2 :(得分:4)
我没有触发调整大小,而是通过将js包装在'pagecreate'事件中来解决这个问题......就像这样:
$(document).on('pagecreate', '#map', function() {
var mapOptions = {
center: new google.maps.LatLng(40.773782,-73.974236),
zoom: 12,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
});
答案 3 :(得分:0)
我认为正确的方法是在部分图块加载一次时触发事件。下面的代码片段将帮助您实现这一目标。
google.maps.event.addListenerOnce(map, 'tilesloaded', function(){
google.maps.event.trigger(map,'resize');
});
答案 4 :(得分:0)
我发现问题在于JQuery mobile使用Ajax来加载页面。我不确定这是否是最好的做法,但我只是强迫它通常将以下代码放在锚标记中来加载我的地图页面:
data-ajax="false"