一:获取地理位置:
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左右的话,指向正北; 需进一步判断
