我一直在使用地理位置navigator.geolocation.getCurrentPosition
,但发现它不如navigator.geolocation.watchPosition
准确。所以我的想法是让它运行navigator.geolocation.watchPosition
,直到它获得<=100
的准确度,然后显示位置,如果它在15秒内失败,则显示错误。
这是我得到的:
function getLocation() {
if (navigator.geolocation) {
var geo_options = {
enableHighAccuracy: true,
timeout: 15000,
maximumAge: 0
};
var watchID = navigator.geolocation.watchPosition(
showPosition,
showError,
geo_options
);
} else {
// Error here. Geolocation disabled.
}
}
function showPosition(position) {
if (position.coords.accuracy > 100) {
// Keep trying
} else {
// Fire up the map, we got a position!
// Clear the watchID.
navigator.geolocation.clearWatch(watchID);
}
}
我的问题是,由于某些原因我无法清除watchID的成功因为它说它未定义。我猜那是因为功能在外面。
是否有一种简单的方法可以实现showPosition
仅在准确度低于100时触发?现在showPosition
随时被触发,因为它在watchPosition
函数内。
答案 0 :(得分:1)
那是因为watchID
undefined
。您已在getLocation
范围内定义了该范围,但showPosition
未与var watchID;
function getLocation() {
...
watchID = navigator.geolocation.watchPosition(showPosition, showError, geo_options);
}
function showPosition(position) {
if (position.coords.accuracy <= 100) {
navigator.geolocation.clearWatch(watchID);
}
}
共享范围。尝试在两者之外声明它。
'use strict';
function declareX() {
var x = 1;
}
function useX() {
console.log(x);
}
declareX();
useX();
专业提示:如果您的代码在strict mode中运行,则会提醒您出现此错误。
git config --global url."https://".insteadOf git://