我有一个javascript脚本我正在为一个获取设备位置的phonegap应用程序开发,直到获得某个目标精度。如果不满足目标,脚本会再次将自己称为永恒。通常需要1-8次尝试,具体取决于位置和最后一次使用,然后一切正常。我遇到的问题是有些设备从未达到该阈值(对于应用程序来说很好),但由于此脚本在后台运行,因此会损坏电池寿命。那么如何通过单击事件(提交按钮)来终止此脚本?我正在考虑设置一个响应提交按钮更改的全局变量。类似的东西:
if (var != 'quit') {
//function
} else {
///nothing
}
function getlocation(position) {
document.getElementById("lat").value = (position.coords.latitude);
document.getElementById("long").value = (position.coords.longitude);
document.getElementById("accu").value = (position.coords.accuracy);
var accuracy = parseInt(position.coords.accuracy, 10);
if (accuracy <= 50) {
$('#scanner').removeClass('littlered').addClass('littlegreen');
} else {
setTimeout(navigator.geolocation.getCurrentPosition(getDroplocation, onError, {
enableHighAccuracy: true
}), 3000);
}
}
但这并没有起作用。我设置了全局变量但没有任何反应。是否有更好的方法或方法来实现上述想法?我是在正确的轨道上吗?
答案 0 :(得分:0)
您需要clearTimeout
更改
function getlocation(position) {
到
var tId;
function getlocation(position) {
和setTimeout
到tId=setTimeout
并执行clearTimeout(tId);
点击任意想要点击或添加计数器并在10次尝试后杀死
例如
<input type="button" id="togglebutton" value="Stop" />
使用
var tId,startPosition="whateverdefaultpositionissetto";
window.onload=function() {
document.getElementById("togglebutton").onclick = function() {
if (tId) {
clearTimeout(tId);
this.value="Start";
}
else {
getlocation(startPosition);
this.value="Stop";
}
}
}
答案 1 :(得分:0)
使用clearTimeout()方法清除使用setTimeout()方法设置的计时器。
var to;
function getlocation(position) {
document.getElementById("lat").value = (position.coords.latitude);
document.getElementById("long").value = (position.coords.longitude);
document.getElementById("accu").value = (position.coords.accuracy);
var accuracy = parseInt(position.coords.accuracy, 10);
if (accuracy <= 50) {
$('#scanner').removeClass('littlered').addClass('littlegreen');
} else {
to = setTimeout(navigator.geolocation.getCurrentPosition(getDroplocation, onError, {
enableHighAccuracy: true
}), 3000);
}
}
//Add click event handler to a button to stop the looping
var button = document.getElementById("testbtn");
testbtn.onclick = function() {
clearTimeout(to);
}