Lambda博客
  • 自我介绍
  • SSR
    • 浅谈SSR
  • React
    • 页面路由——React-Router
    • 管好你的状态——React-Redux
    • 一个哪行——React详解
    • 左膀右臂一个不少——React初探
  • 问题记录
    • js-xlsx实现纯前端导出excel表格
    • 前端开发需要了解的东西
    • 打造高性能网站
  • JavaScript学习笔记
    • 语法和API
    • js-垃圾回收
    • 收集的JS使用技巧
    • 执行机制
    • 原型和原型链
    • 执行上下文
    • 事件循环
    • JavaScript手写代码
    • 43道JS面试题
    • 悄悄的带走了你的东西——闭包详解
    • 你是个富二代吗?——JavaScript作用域链
    • 捉摸不透的女生——JavaScript类型转换
    • 这是你的女神!——JavaScript
  • 网络学习笔记
    • 强不强——HTTP-协商缓存VS强缓存
    • 网络缓存
    • 我要飞的更高——计算机网络
    • 快点!再快点!——CDN
    • 喜怒哀乐多状态——HTTP状态码
    • 你会爱上我的(ಥ_ಥ) ——TCP详解
    • 隔壁老王想篡位?门都没有——同源策略
  • 软技能
  • 安全专题
    • 保护好自己——网站安全,预防
  • 浏览器兼容性
    • 我是个好人——浏览器兼容性
  • 多图片加载——懒加载详解
  • 数据结构
  • Node
    • Node初探
  • Typescript
    • JS Plus 真香——初探 TypeScript
  • 设计模式
    • 不要花里胡哨,要一套一套——设计模式(1)
    • 学会“套路”——设计模式(2)
  • Vue
    • 实操实干——vue实例记录
    • 停下来,问问自己——Vue-刨根问底
    • 你有喘息的机会吗?——Vue,逐步了解
    • 你累吗?来来来,安利框架——Vue-初次见面
  • 小程序
    • 今天天气怎么样——记一次小程序开发
  • Webpack
    • 蛋糕分割整合工具——Webpack-前端工程化
  • 你一块,我一块——Web-modules 前端模块化
  • HTML5
    • 你会画小猪佩奇吗?—— canvas
    • 画个矢量图——HTML5-SVG
    • 听说你爱闹腾——HTML5-多媒体
    • 动画神器——HTML5-requestAnimationFrame
    • 留下痕迹——HTML5-客户端存储
    • 你知道指北针吗?——HTML5-DeviceMotionEvent
    • 你在哪啊?我在这啊——HTML5-Geolocation
    • 你到这,你到那——HTML5-拖拽
    • 你从这,到那——HTML5-拖拽上传文件
    • 开启前端之路——HTML 标签
  • 瀑布流(无限滚动)
  • 我是怎么来的?——浏览器渲染原理
  • Css
    • 由大变小,你行吗 —— 移动端
    • 动起来,这样比较炫—— CSS3 动画
    • 请不要拐弯抹角 —— CSS3 选择器
    • 想炫吗?—— CSS3 属性
    • 最后的最后——CSS自问自答
    • 万事开头难?——深入学习前端常见布局
    • 一入前端深似海——BFC剖析
    • 还有哪些好玩的东西——CSS提升
    • 那些好看的页面是怎么形成的——CSS 初识
  • 拿个小本本记下——Cookie
由 GitBook 提供支持
在本页
  • geolocation 获取当前定位
  • watchPosition 监听位置变化
在GitHub上编辑
  1. HTML5

你在哪啊?我在这啊——HTML5-Geolocation

上一页你知道指北针吗?——HTML5-DeviceMotionEvent下一页你到这,你到那——HTML5-拖拽

最后更新于3年前

HTML5 提供了 geolocation API,用于提供位置相关服务。

地理位置 API 通过window.navigator.geolocation提供。在使用之前需要进行判断该对象是否存在,如果存在的话,那么位置信息可用

if ("geolocation" in navigator) {
  /* 地理位置信息可用 */
} else {
  /* 地理位置信息不可用 */
}

geolocation 获取当前定位

我们可以通过使用getCurrentPosition(success, error, options)函数获取用户当前定位位置。这会异步请求获取用户位置,并查询定位硬件来获取最新信息。当定位被确定后,定义的回调函数就会被执行。

nNYgyt.png
  • success:成功的回调函数(必须)

  • error:错误的回调函数

  • options:参数对象,通过该对象参数设置最长可接受的定位返回时间,等待请求的时间和是否精准定位。

success

// 特别注意:如果您使用的是谷歌浏览器,需要连接vpn才能获取到

let success = function(pos) {
  console.log(pos);
};

// 只传一个参数
window.navigator.geolocation.getCurrentPosition(success);
  • Geoposition 对象属性

    • accuracy 定位精准度,单位 m

    • altitude 海拔

    • altitudeAccuracy 海拔精准度,单位 m

    • heading 方向

    • latitude 纬度

    • longitude 经度

    • speed 速度

error

let error = function(err) {
  console.log(err);
};

//传入错误回调函数
window.navigator.geolocation.getCurrentPosition(success, error);
  • PositionError 对象属性

    • 用户拒绝 code === 1

    • 获取不到 code === 2

    • 连接超时 code === 3

config

const config = {
  // 是否需要高精度位置 默认为false
  enableHighAccuracy: true,
  // 请求超时时间,默认为 infinity,单位ms
  timeout: 1000,
  // 位置信息过期时间,设置为0就无条件获取新的地理位置信息,默认为 0,单位 ms
  maximumAge: 0
};

// 传入参数配置
window.navigator.geolocation.getCurrentPosition(success, error, config);

这里的 code = 3,因为我们设置的请求超时时间为 1000ms,当浏览器在 1000ms 内没有成功的获取到信息的话,就会报连接超时错误

watchPosition 监听位置变化

// 用于注册监听器,在设备的地理位置发生改变的时候自动被调用
// 参数与 getCurrentPosition 相同
let id = geolocation.watchPosition();

在 watchPosition 方法定义使用后,则会不停的获取用户的地理位置信息,不停的更新用户的位置信息。

clearWatch

使用clearWatch(id)对 watch 清除监听

nNNTrq.png
nNU2O1.png
nNaDBt.png