获取 地理位置 : 就是获取 你的 维度和经度坐标,
获取的方式: IP地址 和 wi-fi无线网络(PC端常用的2种) GPS定位和基站 (移动端常用的2种) 所以 移动端比PC端精确些
一、地理位置对象
Geolocation API存在于navigator对象中,所以 navigator.geolocation: 有三个方法:
1、单次定位请求: getCurrentPosition(请求成功,请求失败,数据收集方式(json格式)); 有三个参数
第一个参数是用户允许浏览器共享geolocation成功后的回调方法
coords.latitude 维度 coords.longitude 经度
第二个参数是用获取地理位置信息失败的处理方法,传入错误对象,包含code、message两个属性
失败编号: code
0 |
|
1 | 用户拒绝浏览器获取地理信息 |
2 | 尝试获取用户信息,但是失败了 |
3 | 设置了timeout的值,超时了 |
第三个参数都是geolocation选项,所有的geolocation选项都是可选的,它包含的属性如下:
enableHighAccuracy(Boolean型,默认为false,是否尝试更精确地读取纬度和经度,移动设备上,这可能要使用手机上的GPS,这会消耗移动设备更多的电量)
timeout(单位为毫秒,默认值为0,在放弃并触发处理程序之前,可以等待的时间----用户选择期间是不计时的)
maximumAge(单 位为毫秒,默认值为0。用来告诉浏览器是否使用最近缓存的位置数据,如果在maximumAge内有一个请求,将会返回它,而不请求新位置。
maximumAge如果为Infinity,则总是使用一个缓存的位置,如果为0则必须在每次请求时查找一个新位置)
2、多次定位请求: watchPosition(); 位置改变才会触发(像setInterval)位置改变才会成功,否则除了第一次后面的都是请求失败, 参数: frequency 更新的频率
3、关闭更新请求: clearWatch();类似clearInerval()
代码:
<head> <meta charset="utf-8"> <style type="text/css"> div{ color: red; } </style> <script type="text/javascript"> window.onload = function(){ var btn = document.getElementById("p1"); var show = document.getElementById("show"); btn.onclick = function(){ navigator.geolocation.getCurrentPosition(function(position){ show.innerHTML += "维度: "+position.coords.latitude+" "; show.innerHTML += "经度: "+position.coords.longitude+" "; },function(err){ alert(err.code); },{ enableHighAccuracy : true, timeout : 5000 }); } } </script> </head> <body> <input type="button" id="p1" value="请求"> <div id="show"></div> </body>
目前H5 地理定位一直不成功,不知道是不是因为win10的系统,
H5 的本地存储:Storage
目前 H5 支持的是5M的文件大小,在HTML5中,本地存储是一个window的属性,包括localStorage和sessionStorage,
从名字应该可以很清楚的辨认二者的区别,前者是一直存在本地的,后者只是伴随着session,窗口一旦关闭就没了。二者用法完全相同,
sessionStorage -- 页面关闭,存储也就没有了,数据不共享
localStorage -- 永久存储,可以手动删除数据,数据共享
Storage的特点: 容量5M, 客户端完成,不用请求服务器处理
Storage API : setItem(),设置数据【key/value】 键值对, 都是字符串类型
getItem(),获取数据 ,通过key获取相应的value
removeItem(), 删除相应的value ,clear() 删除所有的信息
小例子:
<script type="text/javascript">
window.onload = function(){
var btn = document.getElementsByTagName("input");
btn[0].onclick = function(){
window.sessionStorage.setItem("name",btn[2].value);
}
btn[1].onclick = function(){
alert(window.sessionStorage.getItem("name") );
}
}
</script>
</head>
<body>
<input type="button" value="设置">
<input type="button" value="显示">
<input type="text" >
</body>
有个存储事件:
当数据有修改或者删除的时候,就会触发storage 事件,在对数据修改的页面上不会触发这个事件,别的共享数据的页面会触发
key |
|
新增 或者 修改 删除的 key值 |
oldValue |
|
改变之前的值,如果key是新增的,值就是null |
newValue |
|
新设的值,可能为null |
storageArea |
当前的storage对象 |
|
url/uri |
|
触发改事件的页面的url |
window.addEventListener("storage",function(){ },false);
例子: 购物车同步:(当在一个页面上 修改时,别的页面打开 发现已经 修改了)
<script type="text/javascript"> window.onload = function(){ var btn = document.getElementsByTagName("input"); for (var i = 0; i < btn.length; i++) { btn[i].onclick = function(){ if(this.checked){ window.localStorage.setItem("yes",this.value); }else{ window.localStorage.setItem("no",this.value); } } }; window.addEventListener("storage",function(ev){ if(ev.key == "yes"){ for (var i = 0; i < btn.length; i++) { if(ev.newValue == btn[i].value) { btn[i].checked = true; } }; }else if(ev.key == "no"){ for (var i = 0; i < btn.length; i++) { if(ev.newValue == btn[i].value) { btn[i].checked = false; } } } },false); } </script> </head> <body> <input type="checkbox" value="苹果" />苹果<br> <input type="checkbox" value="梨子" />梨子<br> <input type="checkbox" value="香蕉" />香蕉<br> <input type="checkbox" value="桔子" />桔子<br> </body>