JavaScript 地理位置

摘要:在本教程中,您将学习如何使用地理位置 API,以便在您同意共享的情况下,允许 Web 应用程序访问您的位置。

什么是地理位置 API

地理位置 API 允许 Web 应用程序在您同意共享的情况下访问您的位置。

为什么使用地理位置 API

地理位置 API 对于需要根据用户位置工作的 Web 应用程序非常有用,例如搜索引擎、电子商务网站、地图和天气应用程序。

例如,电子商务网站可以要求您共享您的位置。一旦获得信息,它就可以根据您的位置向您显示产品可用性以及价格和折扣。

类似地,像 Google.com 这样的搜索引擎可以根据您的搜索词和位置返回本地搜索结果。

例如,如果您在旧金山并搜索披萨,Google 会显示您附近的一系列披萨餐厅。

地理位置对象

地理位置 API 可通过 navigator.geolocation 对象获得。

检查是否支持地理位置 API

要检查浏览器是否支持它,您可以测试 geolocation 属性是否存在于 navigator 对象上,如下所示

if (!navigator.geolocation) {
    console.error(`Your browser doesn't support Geolocation`);
}
Code language: JavaScript (javascript)

获取当前位置

要获取用户的当前位置,您可以调用 navigator.geolocation 对象的 getCurrentPosition() 方法。

getCurrentPosition() 方法发送一个异步请求以检测用户的位置,并查询定位硬件(如 GPS)以获取最新数据。

getCurrentPosition() 方法可能会成功或失败。它接受两个可选回调函数,它们将分别在每种情况下执行。

如果 getCurrentPosition() 成功,您将获得用户的定位信息,以 GeolocationCoordinates 对象的形式。

GeolocationCoordinates 对象具有表示位置的 latitudelongitude 属性。

JavaScript 地理位置示例

以下示例展示了一个 具有一个按钮的简单应用程序。当您点击该按钮时,浏览器会要求您共享您的位置。如果您同意,它将显示您当前的经度和纬度。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>JavaScript Geolocation Demo</title>
    <link rel="stylesheet" href="css/style.css">
</head>
<body>
    <div class="container">
        <button id="show" class="btn">Show my location</button>
        <div id="message"></div>
    </div>
    <script src="js/app.js"></script>
</body>
</html>Code language: HTML, XML (xml)

以下是 app.js 文件的内容

(() => {
    const message = document.querySelector('#message');

    // check if the Geolocation API is supported
    if (!navigator.geolocation) {
        message.textContent = `Your browser doesn't support Geolocation`;
        message.classList.add('error');
        return;
    }

    // handle click event
    const btn = document.querySelector('#show');
    btn.addEventListener('click', function () {
        // get the current position
        navigator.geolocation.getCurrentPosition(onSuccess, onError);
    });


    // handle success case
    function onSuccess(position) {
        const {
            latitude,
            longitude
        } = position.coords;

        message.classList.add('success');
        message.textContent = `Your location: (${latitude},${longitude})`;
    }

    // handle error case
    function onError() {
        message.classList.add('error');
        message.textContent = `Failed to get your location!`;
    }
})();Code language: JavaScript (javascript)

它是如何工作的。

首先,使用 querySelector() 方法选择 #message 元素。

接下来,如果浏览器不支持地理位置 API,则显示错误消息。

然后,选择按钮并附加点击事件处理程序。点击事件处理程序调用 navigator.geolocation 对象的 getCurrentPosition() 方法以获取用户的当前位置。

onSuccessonError 回调函数用于处理成功和错误情况。

之后,定义 onSuccess() 函数,该函数从 position.coords 中获取经度和纬度,并在具有 message 标识符的 <div> 元素上显示它们。

最后,定义 onError() 函数,该函数在 getCurrentPosition() 方法失败时显示错误消息。

请注意,app.js 中的所有代码都封装在一个 IIFE 中。

测试应用程序

以下说明了如何使用 Google Chrome 运行 Web 应用程序。如果您使用的是其他浏览器,例如 Firefox、Edge 或 Safari,您应该能够按照这些步骤进行操作。

当您点击显示我的位置按钮时,浏览器会要求您共享您的位置,如下所示

如果您点击允许按钮,您将看到您的位置,如以下图片所示

请注意,您的位置可能会有所不同。

要更改浏览器设置,您可以点击位置图标,然后点击管理按钮

它将显示一个类似的屏幕

如果您点击垃圾桶图标,允许的网站将被删除。

如果您 刷新应用程序 并点击显示我的位置按钮,它将再次要求您共享您的位置。

这次,如果您点击阻止按钮

…应用程序将显示错误消息

摘要

  • 地理位置 API 允许 Web 应用程序访问用户当前的位置。
  • 使用 navigator.geolocation.getCurrentPosition() 方法获取用户的当前位置。
本教程是否有帮助?