0

我有一个我正在为 phonegap 应用程序开发的 javascript 脚本,该应用程序获取设备位置,直到获得一定的目标精度。如果没有达到目标,脚本会再次调用自身进入永恒。通常需要 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);
    }
}

不过,这并没有奏效。我设置了全局变量,但没有任何反应。有什么更好的方法或方法来实现我上述的想法吗?我在正确的轨道上吗?

4

2 回答 2

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";
    }
  }
}
于 2013-02-13T05:13:40.417 回答
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);
}
于 2013-02-13T05:18:48.150 回答