在很多时候我们需要获取到用户当前的位置,比如地图网站就需要获取位置,包括很多租房网站,这些都要获取到用户当前的位置才能提供服务,我们可以通过 Geolocation 来获取用户的当前位置。
geolocation 是 window.navigator 上的一个属性,我们可以通过 window.navigator.geolocation 来获取到这个对象。
navigator 一般是和操作系统相关的功能,比如剪切板,比如 GPU 信息,这些都可以拿到,我们这里通过里面的
geolocation拿到地理位置。
这个对象上有三个方法,分别是
clearWatch():传入一个 ID,可以用于清除监听位置变化getCurrrentPostion():用于获取当前位置信息watchPosition():可以实时监听当前设备的位置变化,返回一个 ID,当位置发生变化的时候会自动调用参数内部的回调函数
我们主要学习 getCurrrentPostion,由于获取位置本身是一个费时的操作,所以应该属于异步场景,所以该函数使用也是回调模式。当获取成功的时候会调用第一个参数的回调函数,并给回调函数传入位置对象。获取失败的时候会调用第二个参数的回调函数,并传入错误对象,第三个参数为配置对象,由于这个参数在不同浏览器中提供的都不一样,所以这里不过多介绍。
js
navigator.geolocation.getCurrentPosition(position => {
console.log(position);
}, positionError => {
console.log(positionError);
});当然,用户的位置信息也属于隐私信息,所以当我们运行这个代码的时候,浏览器就会要求用户授权网站获取位置信息

如果用户这里选择了阻止,那么就会出现错误,也就是会运行我们传入的第二个回调函数,否则就会运行第一个回调函数,positionError会输出如下信息

当然,我们如果选择了允许,那么就获取到了用户的位置信息

timestamp 就是获取用户位置信息的时间戳,而 coords 对象里面则是保存了用户的真实位置信息,当然我们发现这里有很多空,也就是没获取到,这里其实只是硬件不支持,比如 speed,就是用户的运动速度,我电脑肯定没有速度传感器,所以就获取不到 speed 这个属性,下面是这些属性的介绍:
- latitude(纬度):表示设备当前位置的纬度坐标。它是一个浮点数,通常以度为单位表示。
- longitude(经度):表示设备当前位置的经度坐标。也是一个浮点数,通常以度为单位表示。
- altitude(海拔高度):如果可用,这个属性表示设备的当前海拔高度,通常以米为单位。这个属性在移动设备中可能不常用,因为它需要额外的传感器支持。
- accuracy(精确性):表示纬度和经度坐标的精确度,通常以米为单位。较小的精确度值表示位置信息更准确。
- altitudeAccuracy(海拔高度精确度):如果可用,这个属性表示海拔高度的精确度,通常以米为单位。与 altitude 属性一样,它在移动设备中可能不常用。
- heading(方向):表示设备的当前方向,通常以度为单位。这个属性指示设备的方向,通常与地磁传感器相关。
- speed(速度):表示设备的当前速度,通常以米每秒为单位。这个属性通常与 GPS 数据相关。
这些属性一起提供了有关设备位置和移动方向的详细信息。需要注意的是,并非所有属性在每个设备上都可用,因为它们依赖于设备的硬件和浏览器的支持。在使用这些属性时,应谨慎处理,以适应可能的缺失或不完整数据。