一:获取地理位置:
1、Geolocation接口
Geolocation 接口是一个用来获取设备地理位置的可编程的对象,它可以让Web内容访问到设备的地理位置,这将允许Web应用基于用户的地理位置提供定制的信息。就是用来获取到当前设备的经纬度(位置)
A: 事件:
window.navigator.geolocation.getCurrentPosition(success, error, options)
success: 成功的回调函数,获取位置成功则调用该回调
error: 获取位置失败时调用该回调函数
options: 获取当前位置的配置项参数 :{
1、enableHighAccuracy:表明应用是否使用最高精度;默认(false);
2、timeout: 表明的是设备必须在多长时间(单位毫秒)内返回一个位置; 默认(等待运行结果;意思是获取到一个位置之后, getCurrentPosition() 才会返回一个值。)
3、maximumAge:
在多少秒内可以获得缓存的位置; 如果设置为 0, 说明设备不能使用一个缓存位置,而且必须去获取一个真实的当前位置; 默认为0
}
var options = {
enableHighAccuracy: true,
timeout: 5000,
maximumAge: 0
};
function success(pos) {
// pos.timestamp 表示获取到当前位置的事件戳
var crd = pos.coords; // 返回一个定义了当前位置的Coordinates(坐标) 对象.
console.log('Your current position is:');
console.log('Latitude : ' + crd.latitude);
console.log('Longitude: ' + crd.longitude);
console.log('More or less ' + crd.accuracy + ' meters.');
};
function error(err) {
console.warn('ERROR(' + err.code + '): ' + err.message);
};
navigator.geolocation.getCurrentPosition(success, error, options);
function getPosition (timeout, enableHighAccuracy, maximumAge) {
var timeout = timeout || 10000,
enableHighAccuracy = enableHighAccuracy || false,
maximumAge = maximumAge || 60000;
return new Promise ((resolve, reject) => {
// 不存在导航对象
if( !navigator || !window.navigator ) {
return reject('The browser is not suport navigator');
}
let options = {
timeout, // 获取位置的事件,
enableHighAccuracy, // 是否定位的精确度
maximumAge, // 重复获取地理位置时隔多长时间再次获取
};
let success = function (pos) {
console.log(11);
let crd = pos.coords,
posInfo = {
latitude: crd.latitude, // 纬度
longitude: crd.longitude, //经度
accuracy: crd.accuracy, // latitude longitude 维度 经度
}
resolve(posInfo);
}
let error = function (err) {
console.log(err);
reject('ERROR(' + err.code + '): ' + err.message);
}
window.navigator.geolocation.getCurrentPosition(success, error, options)
})
}
// 使用示例
getPosition()
.then((pos) => pos)
.catch((err) => console.log(err));
B:geolocation对象中的方法
1、通过 geolocation.watchPosition() 设置一个位置改变监听器; 每当设备位置改变时,返回一个 long 类型的该监听器的ID值。
2、通过geolocation.clearPosition(ID) 来清除位置改变监听器
// target 目标位置的经纬度 options 监听器的配置项
function toDestination(target, options) {
if(!target) throw new Error('Must to be set destination!');
var id = null,
options = options || {
enableHighAccuracy: false, // 提高精度
timeout: 10000, // 获取时间
maximumAge: 0, // 在多少秒内可以获得缓存的位置
};
function success(pos) {
let crd = pos.coords; // 位置坐标对象
if (crd.latitude === target.latitude && crd.longitude === target.longitude) {
// 到达目标位置后处理程序
console.log('Your have arrvied!');
// 清除位置监听器
navigator.clearPosition(id);
id = null;
}
}
// 错误事件对象e中包含错误码和错误信息
function error(err) {
console.log(`err(${err.code}): ${err.message}`);
}
id = window.navigator.geolocation.watchPosition(success, error, options);
}
2、通过devicemotion事件来判断手机摇晃的位置
方法:
属性:
1、场景:摇一摇;
3、deviceorientation事件:
属性:
e.alpha; 表示手机按z轴旋转的方向 (0 - 360)
e.beta; 表示手机在x轴上旋转的方向 (-180 - 180)
e.gamma 表示手机在y轴上旋转的方向 (-90 - 90)
场景:(指南针)
el.alopha: 范围在0左右的话,指向正北; 需进一步判断