gpt4 book ai didi

javascript - 通过移动左边缘来调整谷歌地图的大小

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

我想在用户单击按钮时放大(或缩小) map 。 map 将调整其左边缘,将其向左移动以变大,同时将右边缘留在同一位置。这基本上就是 google maps 本身所做的,当您单击小部件以放大 map (覆盖左侧栏)时。

我调整包含 map 的 div 的大小/重新定位没有问题,然后调用 google.maps.event.trigger( map ,“调整大小”);唯一的问题是,正如预期的那样, map 的内容在屏幕上移动。我不想要那个,我想把 map 留在同一个位置,就像谷歌地图一样。换句话说,我希望右边缘的经纬度位置保持不变,因为 map 的右边缘不会改变。

当然,先调用 map.getCenter() 然后调用 map.setCenter() 并不能满足我的要求(虽然总比什么都不做要好)。 map.panBy() 可能有效,因为它以像素为单位接受参数(相对于纬度/经度),但它会对其进行动画处理,这不是我想要的。

有什么想法吗?我是否必须将纬度/经度转换为像素,或者是否有更简单的方法来执行此操作?

最佳答案

诀窍不是调整 map 大小,而是在您创建的 map 上放置一个 mask ( map 以最大尺寸创建),然后移动 mask (一个 div)。 map 始终保持相同大小。您可能需要调整 map 上其他控件的位置,例如缩放等(这可以使用标准 map API 来完成)或仅在右侧显示您的控件。

要记住的一点是,该 map 将有一个等于全尺寸 map 的边界框,因此如果您向 map 添加标记(并且您希望用户看到它们),您需要跟踪 map 的边界框 map 的当前可见部分(latLng 到像素转换)- 如果您将标记添加到被掩码覆盖的部分,则可以滚动 map 。

这是一个使用 jquery 动画完成的示例(但您可以通过简单地关闭侧边栏的可见性来实现它)。 .另一个需要注意的重要事项是用于包装器和侧边栏以及 map 容器的 CSS。...享受:

<!DOCTYPE html>
<html>
<head>
<title>Resize map</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">
var map;
var overlay;
var sidebar_expanded = true;
function initialize() {
var myLatlng = new google.maps.LatLng(-25.363882,131.044922);
var myOptions = {
zoom: 4,
center: myLatlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

}

$(document).ready( function() {
$("#hide").click( function(e) {
if (sidebar_expanded){
offset = "-=140";
text = "Show me"
} else {
offset = "+=140";
text = "Hide me"
}
$("#sidebar").animate({

left: offset,

}, 1000, function() {

// Animation complete.
//you probably want to change content of the hide me div to show me, etc)
$("#hide").text(text);
sidebar_expanded = (sidebar_expanded ) ? false : true;
});
})
})
</script>
<style>
body {
text-align: center;
}
#map_canvas {
position: absolute;
top: 0;
left: 0;
}
#wrapper {
position: relative;
width: 900px;
height: 500px;
overflow: hidden;
}
#sidebar {
position: absolute;
top: 0;
left: 0;
width: 200px;
height: 500px;
background: white;
z-index: 2000000;
border: 1px solid black;
}

</style>
</head>
<body onload="initialize()">
<div id="wrapper">
<div id="sidebar">
<div id="hide" style="text-align:right;padding: 6px;">
Hide me
</div>
</div>
<div id="map_canvas" style="width:900px;height: 500px;">
</div>
</div>
</body>
</html>

关于javascript - 通过移动左边缘来调整谷歌地图的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6447138/

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