HTML5 地理定位-geolocation

话不多说,直接上代码

注意:注重用户隐私,请求定位的时候,会弹出一个提示框,如果你选择了不允许,下次再进入的时候就不会有请求定位权限的提示框了,浏览器会把这个站点的操作记录下来,不清楚缓存时间,在app上试了很久,一旦拒绝是真一点办法也没有,缓存是真强

支持:Android 2.0+、IOS 3.0+;Firefox、Opera、Internet Explorer、Chrome、Safari…
注意:在IOS 10中,苹果对webkit定位权限进行了修改,所有定位请求的页面必须是https协议的。如果是非https网页,在http协议下通过html5原生定位接口会返回错误,也就是无法正常定位到用户的具体位置,而已经支持https的网站则不会受影响。
解决:升级站点到HTPPS或者调用第三方(高德/腾讯/百度…)

export const getLocationH5 = function  () {
  // 方法是异步的,使用promise同步化一下,逻辑在then里面处理
  return new Promise((resolve, reject) => {
    console.log('navigator', navigator); // 提供当前浏览器及操作系统等信息,也是window对象中的成员
    if (navigator.geolocation) {
    // getCurrentPosition(成功回调, 失败回调, options--可指定三个参数)
      navigator.geolocation.getCurrentPosition(function (position) {
      	console.log(position)
      	let location = {}
      	location.lat = position.coords.latitude // 纬度
    	location.lng = position.coords.longitude // 经度
        resolve(location )
      }, function (error) {
        var errorMessage = ''
        switch (error.code) {
          case error.PERMISSION_DENIED:
            errorMessage = '用户拒绝对获取地理位置的请求'
            break
          case error.POSITION_UNAVAILABLE:
            errorMessage = '位置信息是不可用的'
            break
          case error.TIMEOUT:
            errorMessage = '请求用户地理位置超时'
            break
          case error.UNKNOWN_ERROR:
            errorMessage = '未知错误'
            break
        }
        reject(errorMessage)
      }, {
        enableHighAcuracy: false, // 指示浏览器获取高精度的位置,默认为false,设置true可能会导致响应时间变慢,在手机上耗电快
        timeout: 5000, // 指定获取地理位置的超时时间,默认不限时,单位为毫秒
        maximumAge: 3000 // 最长有效期,在重复获取地理位置时,此参数指定多久再次获取位置。
      })
    } else {
      reject('你的浏览器不支持当前地理位置信息获取')
    }
  })
}

页面调用:

  getPosition().then(res => {
  	// 逻辑处理
    console.log('定位数据+', res);
  }).catch((error) => {
  	// 错误信息
    console.log('定位error+', error);
  })

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值