<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>获取当前地理位置</title>
</head>
<body>
<p>window.navigator.geolocation对象存在3个方法:</p>
<p>1、getCurrentPosition 获取当前地理位置</p>
<p>2、watchPosition 监视位置信息</p>
<p>3、clearWatch 停止获取位置信息</p>
<p>1-1、getCurrentPosition(successCallback, onError, options)方法接受1个、2个或者3个参数。</p>
<!-- 第1个参数为获取当前地理位置信息成功时所执行的回调函数,第2个参数为获取当前地理位置信息失败时所执行的回调函数,第3个参数为一些可选属性的列表。其中,第2、3个参数为可选参数 -->
<p>第1个参数,在获取地理位置信息成功时执行的回调函数中,带有一个position参数,它是一个Geoposition对象。该对象有以下两个属性:</p>
<p>timestamp属性,时间戳。</p>
<p>coords属性,coords属性是一个Coordinates类型对象,包含下面这些属性:</p>
<p>accuracy 获取到的经度或纬度的精度(以米为单位)。</p>
<p>altitude 当前地理位置的海拔高度(不能获取时为null)。</p>
<p>altitudeAccuracy 获取到的海拔高度的精度(以米为单位)。</p>
<p>heading 设备的前进方向。用面朝正北方向的顺时针旋转角度来表示(不能获取时为null)。</p>
<p>latitude 当前地理位置的经度。</p>
<p>longitude 当前地理位置的纬度</p>
<p>speed 当前的前进速度(以米/秒为单位,不能获取时为null)。
<p>第2个参数,在获取地理位置信息失败时执行的回调函数中,带有一个error参数,它是一个PositionError对象。该对象有以下两个属性:</p>
<p>code属性,可能值:</p>
<p>当属性值为1时,表示用户拒绝了位置服务,"User denied Geolocation"。</p>
<p>当属性值为2时,表示获取不到位置信息。</p>
<p>当属性值为3时,表示获取信息超时错误,"Timeout expired"。</p>
<p>message属性</p>
<p>message属性值为一个字符串,包含了错误信息,这个错误信息在我们开发和调试时非常有用。</p>
<p>第3个参数是一个可选属性的列表,说明如下:</p>
<p>enableHighAccuracy属性,是否要求高精度的地理位置信息。</p>
<p>timeout属性,超时限制(单位为毫秒)。如果在该时间内未获取到地理位置信息,则返回错误。</p>
<p>maximumAge属性,对地理位置信息进行缓存的有效时间(单位为毫秒)。如果该值设为0,则每次都去重新获取地理位置信息</p>
</body>
<script type="text/javascript">
const locationClass = class{
constructor(){
}
testPro(){
const a = this.promisePro();
a.then(()=>{
if(this.isOk()){
return true
}
}).then(()=>{
this.getLocation()
})
}
promisePro(){
return new Promise((resolve, reject) => {
if(true){
resolve()
}
});
}
isOk(){
return 'geolocation' in navigator;
}
getLocation(){
navigator.geolocation.getCurrentPosition(
//TODO 获取成功时的处理
(position)=> {
let timestamp = position.timestamp;
let coords = position.coords;
console.log(timestamp);
console.log(coords);
},
//TODO 获取失败时的处理
(error)=> {
console.log(error);
}, {
maximumAge: 0
}
)
}
}
const location1 = new locationClass();
location1.testPro()
</script>
</html>