在刷新HTTP后,如何使Google地图保留用户的视图(缩放级别和中心点)?
现在,它会在每次刷新后重置视图.我可以调整下面的代码,以某种方式说"缩放:当前缩放级别"和"居中:当前中心位置"吗?
function initialize() {
var myLatLng = new google.maps.LatLng(0,0);
var myOptions = {
zoom: 2,
center: myLatLng,
mapTypeId: google.maps.MapTypeId.TERRAIN
};
Run Code Online (Sandbox Code Playgroud)
我已经找到了其他一些方法来为http://test.barrycarter.info/sunstuff.html做这个, 但它们都相当困难.
JPM*_*Mox 14
试试这个:
// you could use the event listener to load the state at a certain point
loadMapState();
// as a suggestion you could use the event listener to save the state when zoom changes or drag ends
google.maps.event.addListener(map, 'tilesloaded', tilesLoaded);
function tilesLoaded() {
google.maps.event.clearListeners(map, 'tilesloaded');
google.maps.event.addListener(map, 'zoom_changed', saveMapState);
google.maps.event.addListener(map, 'dragend', saveMapState);
}
// functions below
function saveMapState() {
var mapZoom=map.getZoom();
var mapCentre=map.getCenter();
var mapLat=mapCentre.lat();
var mapLng=mapCentre.lng();
var cookiestring=mapLat+"_"+mapLng+"_"+mapZoom;
setCookie("myMapCookie",cookiestring, 30);
}
function loadMapState() {
var gotCookieString=getCookie("myMapCookie");
var splitStr = gotCookieString.split("_");
var savedMapLat = parseFloat(splitStr[0]);
var savedMapLng = parseFloat(splitStr[1]);
var savedMapZoom = parseFloat(splitStr[2]);
if ((!isNaN(savedMapLat)) && (!isNaN(savedMapLng)) && (!isNaN(savedMapZoom))) {
map.setCenter(new google.maps.LatLng(savedMapLat,savedMapLng));
map.setZoom(savedMapZoom);
}
}
function setCookie(c_name,value,exdays) {
var exdate=new Date();
exdate.setDate(exdate.getDate() + exdays);
var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
document.cookie=c_name + "=" + c_value;
}
function getCookie(c_name) {
var i,x,y,ARRcookies=document.cookie.split(";");
for (i=0;i<ARRcookies.length;i++)
{
x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
x=x.replace(/^\s+|\s+$/g,"");
if (x==c_name)
{
return unescape(y);
}
}
return "";
}
Run Code Online (Sandbox Code Playgroud)
我不想使用Cookies,所以我使用localStorage创建了另一种方法。
的HTML
<div id="map-canvas" style="width:100%;height:500px;"></div>
Run Code Online (Sandbox Code Playgroud)
JS
$(document).ready(function(){
//Global Variables
var mapCentre;
var map;
initialize();
function initialize() {
var mapOptions;
if(localStorage.mapLat!=null && localStorage.mapLng!=null && localStorage.mapZoom!=null){
mapOptions = {
center: new google.maps.LatLng(localStorage.mapLat,localStorage.mapLng),
zoom: parseInt(localStorage.mapZoom),
scaleControl: true
};
}else{
//Choose some default options
mapOptions = {
center: new google.maps.LatLng(0,0),
zoom: 11,
scaleControl: true
};
}
//MAP
map = new google.maps.Map(document.getElementById("map-canvas"),
mapOptions);
mapCentre = map.getCenter();
//Set local storage variables.
localStorage.mapLat = mapCentre.lat();
localStorage.mapLng = mapCentre.lng();
localStorage.mapZoom = map.getZoom();
google.maps.event.addListener(map,"center_changed", function() {
//Set local storage variables.
mapCentre = map.getCenter();
localStorage.mapLat = mapCentre.lat();
localStorage.mapLng = mapCentre.lng();
localStorage.mapZoom = map.getZoom();
});
google.maps.event.addListener(map,"zoom_changed", function() {
//Set local storage variables.
mapCentre = map.getCenter();
localStorage.mapLat = mapCentre.lat();
localStorage.mapLng = mapCentre.lng();
localStorage.mapZoom = map.getZoom();
});
}
});
Run Code Online (Sandbox Code Playgroud)
链接到JSFiddle:http : //jsfiddle.net/x11joex11/G4rdm/10/
因为地图是从海洋中部开始,所以只需放大地图即可在地图上四处移动,然后再次点击运行或刷新页面,您会看到它记住了位置和缩放。
每当用户平移屏幕或缩放屏幕时,由于事件消息"center_changed"和"zoom_changed"
您需要将此数据存储在 cookie 中,然后从 cookie 中读取以获取值,或者如果 cookie 不存在则使用默认值。在 上有一个事件侦听器zoom_changed,并使用map.getZoom(),然后将缩放级别保存到 cookie。同样打开一个事件监听器center_changed并使用它map.getCenter()来将中心点坐标保存到 cookie 中。或者可能可以将它们都包装到bounds_changed.
| 归档时间: |
|
| 查看次数: |
11006 次 |
| 最近记录: |