gpt4 book ai didi

javascript - 如何使用 Google Maps Api v3 在同一页面上全屏打开谷歌地图?

转载 作者:行者123 更新时间:2023-11-29 22:07:11 24 4
gpt4 key购买 nike

所以,我的问题是 - 我的页面上有一张小 map ,我想在同一页面上通过按一个按钮以全屏方式打开这张 map ,然后以相同的方式将其关闭。我认为这可以通过按下按钮时删除 div 样式来完成,但我没有成功,这可能是一种错误的方法吗?我知道这是一个简单的问题,但我的 google 技能不够好,我只是不知道如何正确地提出这个问题,所以我在这里问。

我的代码只是由 GoogleMapsTileCutter 生成的另外我添加了一些来自 here 的代码用于限制平移。这是我完成的所有代码。

<!DOCTYPE html>
<html lang="en">
<head>
<title>PS_Bramus.GoogleMapsTileCutter</title>
<meta charset="utf-8" />
<style>
html, body {
height: 100%;
margin: 0;
padding: 0;
}
#map {
width:100%;
height:100%;
color: #CCC;
background: #EFEFEF;
}
span.loading {
display: block;
text-align: center;
font: 300 italic 72px/400px "HelveticaNeue-Light", "Helvetica Neue Light", "Helvetica Neue", sans-serif;
}
</style>
</head>
<body>
<div id="map"><span class="loading">loading tiles...</span></div>
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>
<script>


/*
* = PS_Bramus.GoogleMapsTileCutter Config
* ----------------
*/

var repeatOnXAxis = false; // Do we need to repeat the image on the X-axis? Most likely you'll want to set this to false



/*
* Helper function which normalizes the coords so that tiles can repeat across the X-axis (horizontally) like the standard Google map tiles.
* ----------------
*/

function getNormalizedCoord(coord, zoom) {
if (!repeatOnXAxis) return coord;

var y = coord.y;
var x = coord.x;

// tile range in one direction range is dependent on zoom level
// 0 = 1 tile, 1 = 2 tiles, 2 = 4 tiles, 3 = 8 tiles, etc
var tileRange = 1 << zoom;

// don't repeat across Y-axis (vertically)
if (y < 0 || y >= tileRange) {
return null;
}

// repeat across X-axis
if (x < 0 || x >= tileRange) {
x = (x % tileRange + tileRange) % tileRange;
}

return {
x: x,
y: y
};

}


/*
* Main Core
* ----------------
*/

window.onload = function() {

// Define our custom map type
var customMapType = new google.maps.ImageMapType({
getTileUrl: function(coord, zoom) {
var normalizedCoord = getNormalizedCoord(coord, zoom);
if(normalizedCoord && (normalizedCoord.x < Math.pow(2, zoom)) && (normalizedCoord.x > -1) && (normalizedCoord.y < Math.pow(2, zoom)) && (normalizedCoord.y > -1)) {
return zoom + '_' + normalizedCoord.x + '_' + normalizedCoord.y + '.jpg';
} else {
return 'empty.jpg';
}
},
tileSize: new google.maps.Size(256, 256),
maxZoom: 5,
name: 'PS_Bramus.GoogleMapsTileCutter'
});

// Basic options for our map
var myOptions = {
center: new google.maps.LatLng(0, 0),
zoom: 3,
minZoom: 3,
disableDefaultUI: true,
streetViewControl: false,
mapTypeControl: false,
mapTypeControlOptions: {
mapTypeIds: ["custom"]
}
};

// Init the map and hook our custom map type to it
var map = new google.maps.Map(document.getElementById('map'), myOptions);
map.mapTypes.set('custom', customMapType);
map.setMapTypeId('custom');

// bounds of the desired area
var allowedBounds = new google.maps.LatLngBounds(
new google.maps.LatLng(-47,-95.61),
new google.maps.LatLng(47,95.61)
);
var lastValidCenter = map.getCenter();

google.maps.event.addListener(map, 'center_changed', function() {
if (allowedBounds.contains(map.getCenter())) {
// still within valid bounds, so save the last valid position
lastValidCenter = map.getCenter();
return;
}

// not valid anymore => return to last valid position
map.panTo(lastValidCenter);
});

}
</script>

</body>

最佳答案

如果只是简单地调整 map div 的大小,那么以下 JavaScript 应该会引导您朝着正确的方向前进:

function resizeMap() {
var myMap = document.getElementById('map-canvas');
myMap.style.height = 100%;
myMap.style.width = 100%;
}

请注意,百分比仅相对于 map div 的祖先元素。

然后您将您的按钮 onclick 映射到 resizeMap() 函数,您就设置好了!

如果你想要一个 jQuery 方法,上面的代码可能是这样的:

function resizeMap() {
$("#map-canvas").css({height: 100%, width: 100%});
}

要将 map 恢复到原来的宽度和高度,您可以先检查宽度和高度是否设置为 100%,然后调整大小,但更优雅的解决方案是使用类而不是内联样式,这可能类似于以下内容:

function resizeMap() {
var myMap = document.getElementById('map-canvas');
myMap.classList.toggle("fullscreen");
}

然后在你的CSS中你可以:

.fullscreen {
width: 100%;
height: 100%;
}

单击按钮只会在打开和关闭类(class)之间切换。

关于javascript - 如何使用 Google Maps Api v3 在同一页面上全屏打开谷歌地图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20318182/

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