主页
  • 主页
  • 分类
  • 热文
  • 教程
  • 面试
  • 标签
JavaScript

JavaScript 基础

JavaScript 主页
JavaScript 概述
JavaScript 特性
JavaScript 启用
JavaScript 展示位置
JavaScript 语法
JavaScript hello_world
JavaScript console.log()
JavaScript 注释
JavaScript 变量
JavaScript let 语句
JavaScript 常量
JavaScript 数据类型
JavaScript 类型转换
JavaScript 严格模式
JavaScript 保留关键字

JavaScript 操作符

JavaScript 操作符
JavaScript 算术运算符
JavaScript 比较操作符
JavaScript 逻辑运算符
JavaScript 位运算符
JavaScript 赋值运算符
JavaScript 条件运算符
JavaScript typeof 运算符
JavaScript Nullish 合并运算符
JavaScript delete 运算符
JavaScript 逗号运算符
JavaScript 分组运算符
JavaScript Yield 运算符
JavaScript 扩展运算符
JavaScript 指数运算符
JavaScript 运算符优先级

JavaScript 控制流

JavaScript if...else 语句
JavaScript while 循环
JavaScript for 循环
JavaScript for...in 循环
JavaScript for...of 循环
JavaScript 循环控制
JavaScript break 语句
JavaScript continue 语句
JavaScript switch 语句
JavaScript 可迭代对象

JavaScript 函数

JavaScript 函数
JavaScript 函数表达式
JavaScript 函数参数和参数值
JavaScript 默认参数
JavaScript Function() 构造函数
JavaScript 函数提升
JavaScript 自执行函数
JavaScript 箭头函数
JavaScript 函数调用
JavaScript call() 方法
JavaScript apply() 方法
JavaScript bind() 方法
JavaScript 闭包
JavaScript 作用域
JavaScript 全局变量
JavaScript 智能函数参数

JavaScript 对象

JavaScript Number 对象
JavaScript Boolean 对象
JavaScript String 对象
JavaScript 数组对象
JavaScript 日期对象
JavaScript DataView 对象
JavaScript 处理程序
JavaScript Math 对象
JavaScript 正则表达式
JavaScript Symbol 类型
JavaScript Set 对象
JavaScript WeakSet 对象
JavaScript Map 对象
JavaScript WeakMap 对象
JavaScript 可迭代对象
JavaScript Reflect 对象
JavaScript TypedArray
JavaScript 模板字面量
JavaScript 标记模板

JavaScript 面向对象

JavaScript 对象
JavaScript 类
JavaScript 对象属性
JavaScript 对象方法
JavaScript 静态方法
JavaScript 显示对象
JavaScript 对象访问器属性
JavaScript 对象构造器
JavaScript 原型(Prototype)
JavaScript ES5 对象方法
JavaScript 封装
JavaScript 继承
JavaScript 抽象
JavaScript 多态
JavaScript 解构赋值
JavaScript 数组解构
JavaScript 嵌套解构
JavaScript 可选链
JavaScript 全局对象
JavaScript mixins
JavaScript 代理(Proxy)

JavaScript Cookies

JavaScript Cookies操作
JavaScript Cookie 属性
JavaScript 删除 Cookies

JavaScript 浏览器 BOM

JavaScript 浏览器对象模型(BOM)
JavaScript 窗口对象
JavaScript Document 对象
JavaScript 屏幕对象
JavaScript Window History 对象
JavaScript Navigator 对象
JavaScript Location 对象
JavaScript Console 对象

JavaScript Web APIs

JavaScript Web API
JavaScript History API
JavaScript 存储 API
JavaScript Forms API
JavaScript Worker API
JavaScript Fetch API
JavaScript 定位 API

JavaScript 事件

JavaScript 事件
JavaScript DOM 事件
JavaScript addEventListener()
JavaScript 鼠标事件
JavaScript 键盘事件
JavaScript 表单事件
JavaScript 窗口事件
JavaScript 事件委托
JavaScript 事件冒泡
JavaScript 事件捕获
JavaScript 自定义事件

JavaScript 错误处理

JavaScript 错误处理
JavaScript try-catch
JavaScript 调试
JavaScript 自定义错误
JavaScript 扩展错误

JavaScript 重要关键字

JavaScript this'关键字
JavaScript void 关键字
JavaScript new 关键字
JavaScript var 关键字

JavaScript HTML DOM

JavaScript HTML DOM
JavaScript DOM 方法
JavaScript 文档对象
JavaScript DOM 元素
JavaScript 文档表单
JavaScript 更改 HTML
JavaScript 更改 CSS
JavaScript DOM 动画
JavaScript DOM 导航
JavaScript DOM 集合
JavaScript 节点列表

JavaScript 杂项

JavaScript Ajax
JavaScript 异步迭代
JavaScript Atomics 对象
JavaScript 剩余参数
JavaScript 页面重定向
JavaScript 对话框
JavaScript 打印网页
JavaScript 表单验证
JavaScript 创建动画
JavaScript 多媒体
JavaScript 图像地图
JavaScript 浏览器兼容性
JavaScript JSON
JavaScript 多行字符串
JavaScript 浅拷贝
JavaScript 日期格式
JavaScript 获取日期方法
JavaScript 调用栈
JavaScript 引用类型
JavaScript 设置日期方法
JavaScript 模块
JavaScript IndexedDB
JavaScript clickjacking(点击劫持)
JavaScript 动态导入
JavaScript BigInt
JavaScript 柯里化(Currying)
JavaScript 图形库
JavaScript Blob
JavaScript Unicode
JavaScript 绘制图形
JavaScript 防抖
JavaScript 性能
JavaScript 编码规范

基础

JavaScript 主页
JavaScript 概述
JavaScript 特性
JavaScript 启用
JavaScript 展示位置
JavaScript 语法
JavaScript hello_world
JavaScript console.log()
JavaScript 注释
JavaScript 变量
JavaScript let 语句
JavaScript 常量
JavaScript 数据类型
JavaScript 类型转换
JavaScript 严格模式
JavaScript 保留关键字

操作符

JavaScript 操作符
JavaScript 算术运算符
JavaScript 比较操作符
JavaScript 逻辑运算符
JavaScript 位运算符
JavaScript 赋值运算符
JavaScript 条件运算符
JavaScript typeof 运算符
JavaScript Nullish 合并运算符
JavaScript delete 运算符
JavaScript 逗号运算符
JavaScript 分组运算符
JavaScript Yield 运算符
JavaScript 扩展运算符
JavaScript 指数运算符
JavaScript 运算符优先级

控制流

JavaScript if...else 语句
JavaScript while 循环
JavaScript for 循环
JavaScript for...in 循环
JavaScript for...of 循环
JavaScript 循环控制
JavaScript break 语句
JavaScript continue 语句
JavaScript switch 语句
JavaScript 可迭代对象

函数

JavaScript 函数
JavaScript 函数表达式
JavaScript 函数参数和参数值
JavaScript 默认参数
JavaScript Function() 构造函数
JavaScript 函数提升
JavaScript 自执行函数
JavaScript 箭头函数
JavaScript 函数调用
JavaScript call() 方法
JavaScript apply() 方法
JavaScript bind() 方法
JavaScript 闭包
JavaScript 作用域
JavaScript 全局变量
JavaScript 智能函数参数

对象

JavaScript Number 对象
JavaScript Boolean 对象
JavaScript String 对象
JavaScript 数组对象
JavaScript 日期对象
JavaScript DataView 对象
JavaScript 处理程序
JavaScript Math 对象
JavaScript 正则表达式
JavaScript Symbol 类型
JavaScript Set 对象
JavaScript WeakSet 对象
JavaScript Map 对象
JavaScript WeakMap 对象
JavaScript 可迭代对象
JavaScript Reflect 对象
JavaScript TypedArray
JavaScript 模板字面量
JavaScript 标记模板

面向对象

JavaScript 对象
JavaScript 类
JavaScript 对象属性
JavaScript 对象方法
JavaScript 静态方法
JavaScript 显示对象
JavaScript 对象访问器属性
JavaScript 对象构造器
JavaScript 原型(Prototype)
JavaScript ES5 对象方法
JavaScript 封装
JavaScript 继承
JavaScript 抽象
JavaScript 多态
JavaScript 解构赋值
JavaScript 数组解构
JavaScript 嵌套解构
JavaScript 可选链
JavaScript 全局对象
JavaScript mixins
JavaScript 代理(Proxy)

Cookies

JavaScript Cookies操作
JavaScript Cookie 属性
JavaScript 删除 Cookies

浏览器 BOM

JavaScript 浏览器对象模型(BOM)
JavaScript 窗口对象
JavaScript Document 对象
JavaScript 屏幕对象
JavaScript Window History 对象
JavaScript Navigator 对象
JavaScript Location 对象
JavaScript Console 对象

Web APIs

JavaScript Web API
JavaScript History API
JavaScript 存储 API
JavaScript Forms API
JavaScript Worker API
JavaScript Fetch API
JavaScript 定位 API

事件

JavaScript 事件
JavaScript DOM 事件
JavaScript addEventListener()
JavaScript 鼠标事件
JavaScript 键盘事件
JavaScript 表单事件
JavaScript 窗口事件
JavaScript 事件委托
JavaScript 事件冒泡
JavaScript 事件捕获
JavaScript 自定义事件

错误处理

JavaScript 错误处理
JavaScript try-catch
JavaScript 调试
JavaScript 自定义错误
JavaScript 扩展错误

重要关键字

JavaScript this'关键字
JavaScript void 关键字
JavaScript new 关键字
JavaScript var 关键字

HTML DOM

JavaScript HTML DOM
JavaScript DOM 方法
JavaScript 文档对象
JavaScript DOM 元素
JavaScript 文档表单
JavaScript 更改 HTML
JavaScript 更改 CSS
JavaScript DOM 动画
JavaScript DOM 导航
JavaScript DOM 集合
JavaScript 节点列表

杂项

JavaScript Ajax
JavaScript 异步迭代
JavaScript Atomics 对象
JavaScript 剩余参数
JavaScript 页面重定向
JavaScript 对话框
JavaScript 打印网页
JavaScript 表单验证
JavaScript 创建动画
JavaScript 多媒体
JavaScript 图像地图
JavaScript 浏览器兼容性
JavaScript JSON
JavaScript 多行字符串
JavaScript 浅拷贝
JavaScript 日期格式
JavaScript 获取日期方法
JavaScript 调用栈
JavaScript 引用类型
JavaScript 设置日期方法
JavaScript 模块
JavaScript IndexedDB
JavaScript clickjacking(点击劫持)
JavaScript 动态导入
JavaScript BigInt
JavaScript 柯里化(Currying)
JavaScript 图形库
JavaScript Blob
JavaScript Unicode
JavaScript 绘制图形
JavaScript 防抖
JavaScript 性能
JavaScript 编码规范

JavaScript 定位 API


上一章 下一章

定位 API 是一个 Web API,提供了 JavaScript 接口来访问用户的地理位置数据。定位 API 包含了多种方法和属性,可以用来在你的网站上获取用户的地理位置。

它通过设备的 GPS 来检测用户的位置。位置的准确性取决于 GPS 设备的精度。

因为位置信息涉及用户的隐私,所以在访问位置信息前会请求权限。如果用户授予了权限,网站就可以访问纬度、经度等信息。

有时,开发者需要在网站上获取用户的位置。例如,如果你正在创建类似于 Ola、Uber 等类型的应用程序,你需要知道用户的位置以便接送他们。

定位 API 允许用户与特定的网站分享他们的位置。

定位 API 的实际应用场景

以下是定位 API 的实际应用场景:

  • 获取用户的坐标,并在地图上显示它们。
  • 在照片中标记用户的位置。
  • 向用户推荐附近的商店、美食广场、加油站等。
  • 获取当前位置以配送产品或食物。
  • 从用户的当前位置接送他们。

使用定位 API

要使用定位 API,可以使用窗口对象的 navigator 属性。Navigator 对象包含 geolocation 属性,其中包含了各种用于操作用户位置的方法和属性。

语法

按照下面的语法使用定位 API。

var geolocation = window.navigator.geolocation;

或者

var geolocation = navigator.geolocation;

这里,定位对象允许你访问位置坐标。

示例:检查浏览器支持情况

使用 navigator,你可以检查用户的浏览器是否支持 Geolocation.geolocation 属性。

下面的代码会根据定位是否受支持来打印相应的消息。

首先,我们将数据转换为 JSON 格式。之后,将数据转换为字符串并在网页上打印出来。

<html>
<body>
  <div id="output"></div>
  <script>
    const output = document.getElementById("output");
    if (navigator.geolocation) {
      output.innerHTML += "Geolocation is supported by your browser.";
    } else {
      output.innerHTML += "Geolocation is not supported by your browser.";
    }
  
</script>
</body>
</html>

输出

Geolocation is supported by your browser.

定位方法

以下是定位 API 的方法。

方法 描述
getCurrentPosition() 用于检索网站用户的当前地理位置。
watchPosition() 用于连续更新用户的实时位置。
clearWatch() 清除使用 watchPosition() 方法进行的持续位置监控。

位置属性

getCurrentPosition() 方法会执行你传入的回调函数。回调函数接受一个对象作为参数,该对象包含有关用户位置的信息。

下面列出了位置对象的所有属性。

属性 类型 描述
coords 对象 这是一个作为 getCurrentPosition() 方法回调函数参数的对象。它包含下面的属性。
coords.latitude 数字 包含当前位置的纬度(十进制度)。范围是[-90.00, +90.00]。
coords.longitude 数字 包含当前位置的经度(十进制度)。范围是[-180.00, +180.00]。
coords.altitude 数字 可选属性,指定了相对于 WGS 84 椭球体的高度估计值(米)。
coords.accuracy 数字 也是可选属性,包含纬度和经度估计值的准确性(米)。
coords.altitudeAccuracy 数字 [可选]。包含高度估计值的准确性(米)。
coords.heading 数字 [可选]。包含关于设备当前运动方向的信息(度),从真北顺时针计算。
coords.speed 数字 [可选]。包含设备当前的地面速度(米/秒)。
timestamp 日期 包含关于位置信息检索的时间以及 Position 对象创建的时间。

获取用户位置

你可以使用 getCurrentPosition() 方法来获取用户的当前位置。

语法

用户可以按照下面的语法使用 getCurrentPosition() 方法来获取当前位置。

navigator.geolocation.getCurrentPosition(successCallback, errorCallback, options);

参数

getCurrentPosition() 方法接受三个参数:

  • successCallback:当方法成功获取用户位置时,将调用此函数。
  • errorCallback:当方法在访问用户位置时抛出错误时,将调用此函数。
  • Options:这是个可选参数,是一个包含诸如超时时间、缓存年龄等属性的对象。

允许网站访问您的位置

每当任何网站试图访问您的位置时,浏览器都会弹出权限提示框。如果您点击“允许”,则它可以获取您的位置详细信息。否则,它会抛出错误。

您可以在下面的图中看到权限提示。

示例

在下面的代码中,我们使用 getCurrentPosition() 方法来获取用户的位置。该方法调用 getCords() 函数来获取当前位置。

在 getCords() 函数中,我们打印了 cords 对象的各种属性的值。

首先,我们将数据转换为 JSON 格式。之后,将数据转换为字符串并在网页上打印出来。

<html>
<body>
  <h3> 位置信息 </h3>
  <button onclick="findLocation()">查找位置</button>
  <p id="output"></p>
  <script>
    const output = document.getElementById("output");
    function findLocation() {
      if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(getCords);
      } else {
        output.innerHTML += "Geo Location is not supported by this browser!";
      }
    }
    // 回调函数
    function getCords(coords) {
      output.innerHTML += "当前位置是: <br>";
      output.innerHTML += "纬度: " + coords.coords.latitude + "<br>";
      output.innerHTML += "经度: " + coords.coords.longitude + "<br>";
      output.innerHTML += "精度: " + coords.coords.accuracy + "<br>";
      output.innerHTML += "海拔: " + coords.coords.altitude + "<br>";
    }
  
</script>
</body>
</html>

定位错误

getCurrentPosition() 方法接受第二个参数作为回调函数来处理错误。回调函数可以有一个错误对象作为参数。

在以下情况下,可能会出现错误:

  • 用户拒绝了访问位置的权限。
  • 无法获得位置信息。
  • 请求位置超时。
  • 也可能产生任意错误。

下面是错误对象的属性列表。

属性 类型 描述
code 数字 包含错误代码。
message 字符串 包含错误信息。

下面是不同的错误代码列表。

代码 常量 描述
0 UNKNOWN_ERROR 当定位对象的方法无法检索位置时返回未知错误代码 0。
1 PERMISSION_DENIED 当用户拒绝了访问位置的权限。
2 POSITION_UNAVAILABLE 当无法找到设备的位置。
3 TIMEOUT 当定位对象的方法无法找到用户的位置。

错误处理示例

我们使用 getCurrentPosition() 方法在 findLocation() 函数中处理错误。我们在 getCurrentPosition() 方法中传入了 errorCallback() 函数作为第二个参数来处理错误。

在 errorCallback() 函数中,我们使用 switch case 语句根据错误代码打印不同的错误信息。

当你点击“查找位置”按钮时,它会弹出一个提示框询问你是否授权访问位置。如果你点击“阻止”,它会显示错误信息。

首先,我们将数据转换为 JSON 格式。之后,将数据转换为字符串并在网页上打印出来。

<html>
<body>
<div id="output"></div>
<button onclick="findLocation()">查找位置</button>
<script>
const output = document.getElementById("output");
function findLocation() {
  if (navigator.geolocation) {
    navigator.geolocation.getCurrentPosition(getCords, errorCallback);
  } else {
    output.innerHTML += "此浏览器不支持地理定位功能!";
  }
}
// 回调函数
function getCords(coords) {
  output.innerHTML += "当前位置是: <br>";
  output.innerHTML += "纬度: " + coords.coords.latitude + "<br>";
  output.innerHTML += "经度: " + coords.coords.longitude + "<br>";
}
// 错误处理函数
function errorCallback(err) {
  switch (err.code) {
    case err.PERMISSION_DENIED:
      output.innerHTML += "您拒绝了访问设备的位置";
      break;
    case err.POSITION_UNAVAILABLE:
      output.innerHTML += "您的位置不可用。";
      break;
    case err.TIMEOUT:
      output.innerHTML += "请求超时,无法获取您的位置。";
      break;
    case err.UNKNOWN_ERROR:
      output.innerHTML += "获取您的位置时发生了未知错误。";
      break;
  }
}
</script>
</body>
</html>

定位选项

getCurrentPosition() 方法接受一个包含选项的对象作为第三个参数。

下面是您可以作为选项对象键传递的选项列表:

属性 类型 描述
enableHighAccuracy Boolean 表示您是否希望获取最准确的位置。
timeout Number 接受毫秒数值,表示您等待获取位置数据的时间。
maximumAge Number 接受毫秒数值,指定缓存位置的最大年龄。

示例

下面的代码查找最准确的位置。我们还设置了选项对象中的 maximumAge 和 timeout 属性的毫秒数。

首先,我们将数据转换为 JSON 格式。之后,将数据转换为字符串并在网页上打印出来。

<html>
<body>
<div id="output"></div>
<button onclick="findLocation()">查找位置</button>
<script>
const output = document.getElementById("output");
function findLocation() {
  if (navigator.geolocation) {
    // 定位选项
    const options = {
      enableHighAccuracy: true,
      timeout: 5000,
      maximumAge: 0
    };
    navigator.geolocation.getCurrentPosition(getCords, errorfunc, options);
  } else {
    output.innerHTML += "此浏览器不支持地理定位功能!";
  }
}
// 回调函数
function getCords(coords) {
  output.innerHTML += "当前位置是: <br>";
  output.innerHTML += "纬度: " + coords.coords.latitude + "<br>";
  output.innerHTML += "经度: " + coords.coords.longitude + "<br>";
}
function errorfunc(err) {
  output.innerHTML += "错误信息是 - " + err.message + "<br>";
}
</script>
</body>
</html>

监控用户的当前位置

watchPosition() 方法允许你跟踪用户的实时位置。它返回一个 ID,当你要停止跟踪用户时,可以使用这个 ID 和 clearWatch() 方法。

语法

遵循下面的 watchPosition() 方法语法来跟踪用户的实时位置。

var id = navigator.geolocation.watchPosition(successCallback, errorCallback, options)

errorCallback 和 options 是可选参数。

如果你想停止跟踪用户,可以遵循下面的语法。

navigator.geolocation.clearWatch(id);

clearWatch() 方法接受由 watchPosition() 方法返回的 id 作为参数。

示例

在下面的代码中,我们使用了 geolocation 对象的 watchPosition() 方法来获取用户的连续位置。

我们使用 getCords() 函数作为 watchPosition() 方法的回调函数,在其中打印用户的纬度和经度。

在 findLocation() 方法中,我们使用 setTimeout() 方法在30秒后停止跟踪。

在输出中,你可以观察到代码多次打印用户的位置。

首先,我们将数据转换为 JSON 格式。之后,将数据转换为字符串并在网页上打印出来。

<html>
<body>
<button onclick="findLocation()">查找位置</button>
<div id="output"></div>
<script>
let output = document.getElementById("output");
function findLocation() {
  if (navigator.geolocation) {
    let id = navigator.geolocation.watchPosition(getCoords);
    setTimeout(function () {
      navigator.geolocation.clearWatch(id);
      output.innerHTML += "<br>跟踪已停止!";
    }, 30000); // 30秒后停止跟踪。
  } else {
    output.innerHTML += "<br>此浏览器不支持地理定位功能!";
  }
}
// 回调函数
function getCoords(location) {
  let latitude = location.coords.latitude;
  let longitude = location.coords.longitude;
  output.innerHTML += `<br> 纬度: ${latitude}, 经度: ${longitude}`;
}
</script>
</body>
</html>
上一章 下一章
阅读号二维码

关注阅读号

联系二维码

联系我们

© 2024 Yoagoa. All rights reserved.

粤ICP备18007391号

站点地图