訣竅不是調整地圖大小,而是在您創建的地圖上放置遮罩(地圖以最大尺寸創建)並移動遮罩(div)。地圖始終保持相同的大小。您可能需要調整地圖上其他控件的位置,例如縮放等(可以使用標準地圖apis來完成)或者只需在右側顯示控件。
有一件事要記住,該地圖將有一個邊界框等於全尺寸地圖,所以如果你添加標記到地圖(你希望用戶看到它們),你需要跟蹤邊界框地圖當前可見的部分(latLng到像素轉換) - 這樣,如果向掩碼覆蓋的部分添加標記,則可以滾動地圖。
這是一個使用jquery動畫完成的示例(但只需將側邊欄的可見性關閉即可實現)。 。 需要注意的另一個重要的事情是用於包裝和側欄和地圖容器中的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>
我曾經考慮過這種做法,但很關心這樣的事情,確保谷歌標誌不會被掩蓋了,這是對的條款服務。還有其他的地方可能會讓事情變得糟糕,例如,如果我允許谷歌在地圖上繪製方向,它會自動設置窗口,並且如果窗口的一部分被隱藏,將會不正確地做到這一點。最後,我不確定如何處理像素轉換。 – rob