gpt4 book ai didi

javascript - 谷歌地图 api, map 不会显示。 (JQuery 移动版)

转载 作者:行者123 更新时间:2023-11-28 03:00:34 26 4
gpt4 key购买 nike

我已经在一个元素上工作了几个月,我已经在其中安装了 google maps api。在我添加另一张 map 之前,它工作正常。在最初的元素中,其中一张 map 加载正常,但第二张 map (在不同的页面 html 文件上)只是没有显示 map (有 google Logo 和使用条款之类的东西。但不是 map )我决定重现这个问题,只是为了在此处显示它,看起来在这个版本中,两个 map 都不会显示。

那么我需要存档的是:

  • 有一个 index.html
  • 有两个 html 文件,map1.html 和 map2.html
  • 我可以通过滑动屏幕从 index.html 导航到 map1.html。
  • 点击链接导航到 map2.html(必须有转换)

这是我在原始元素中的内容。我在压缩版本(问题重现)中做了几乎相同的事情,除了我只使用 2 个链接导航到 map1.html 和 map2.html

并且既不显示 map (只显示谷歌 Logo 和其他内容)。

代码如下:

index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.css">
<script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
<script src="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script>

<script async defer src="https://maps.googleapis.com/maps/api/js"></script>
<script language="javascript" type="text/javascript" src="./maps.js"></script>
</head>

<body>
<link rel="stylesheet" type="text/css" href="./overCSS/login.css"/>

<div data-role="page" id="page1" data-theme="a">
<div data-role="main" class="ui-content">
<h1 align="center">help pl0x?</h1>
<ul>
<li>
<a href="./map1.html" data-transition="slidedown">This link will move to the map1.html</a>
</li>
<li>
<a href="./map2.html" data-transition="slidedown">This link will move to the map2.html</a>
</li>
</ul>
</div>
</div>
</body>

</html>

ma​​p1.html

<!DOCTYPE html>
<html>

<head>
<meta charset="UTF-8" />
</head>


<body>

<div data-role="page" id="map1" data-theme="a">
<div id="mapAvailable" style="width: 300px; height: 300px;"></div>
<a href="./index.html" data-transition="slidedown">Go back</a>
<script>
initMap();
</script>
</div>
</body>

</html>

ma​​p2.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"/>

</head>


<body>

<div data-role="page" id="map2" data-theme="a">
<div id="mapSearch" style="width: 300px; height: 300px;"></div>
<a href="./index.html" data-transition="slidedown">Go back</a>
<script>

initMap();

</script>


</div>
</body>
</html>

ma​​ps.js

var mapAvailable;
var mapSearch;
function initMap() {

//init position
var latlng = new google.maps.LatLng(31.2535598, 34.7769184);
var moptions = {
center: latlng,
zoom: 13
};
//init map
if(document.getElementById('mapAvailable')!= null) {
console.log("MapAvailable isn't null");
mapAvailable = new google.maps.Map(document.getElementById('mapAvailable'), moptions);
}
if(document.getElementById('mapSearch')!= null) {
console.log("MapSearch isn't null");
mapSearch = new google.maps.Map(document.getElementById('mapSearch'), moptions);
}
//Marker
var marker = new google.maps.Marker({
position: latlng,
mapAvailable: mapAvailable,
title: 'Wussup'
});
}

希望我提供了足够的信息!请帮帮我好吗?

最佳答案

长话短说

像这样包装你的 initMap(); 调用:

$('body').on('pagecontainershow', function() {
initMap();
});

到底发生了什么?

要了解发生了什么,我们必须牢记导航是如何在 JQuery Mobile 站点中发生的。当导航被触发时,新页面的内容被加载到 DOM 和“the currently visible page is hidden, and another page is shown. Moving from one page to another is accomplished via a transition.

新加载页面正文中的所有内容都将按预期运行,包括 JavaScript 的执行。这一切都在页面加载后立即发生,这发生在页面实际转换到视口(viewport)并变得可见之前。这种操作顺序是导致 map 出现问题的原因。

为了提高性能,Google map 脚本做了一些非常聪明的事情,因为它只会呈现最初对用户可见的 map 部分。由于页面在加载和调用 initMap() 函数时不在视口(viewport)内,因此 map div 的任何部分实际上都不可见。脚本看到了这一点,即使它生成了 map 元素,它也不会加载或渲染其中的任何实际 map 。

要让 map 完全加载和呈现,我们需要延迟调用 initMap() 函数,直到页面完全转换到视口(viewport)中并且可见为止。为此,我们将监听 "pagecontainershow" event。 (在页面的过渡动画完成后触发)发生,然后调用 initMap() 函数。

关于javascript - 谷歌地图 api, map 不会显示。 (JQuery 移动版),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34857423/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com