用计时器中的数据做一些事情

时间:2014-11-17 16:01:34

标签: javascript if-statement setinterval

我有一个问题。 我想做的是: 我有一个间隔功能运行。每5秒钟能量下降1点。 当var能量为66或更低时,我想做一次。 (当能量小于50但后面的能量时)。但它不会显示if状态,只显示其他状态。有人能帮帮我吗?

var energy = 70;

setInterval    (function () {
    energy = energy - 1;
    $("#energiegetal").val(energy);
    }, 5000);

if (energy < 67){
    console.log("works")    
}

else    {
    console.log("not working")
}

3 个答案:

答案 0 :(得分:1)

您的function需要包含if声明,如下所示:

var energy = 70;
setInterval (function () {
    energy = energy - 1;
    $("#energiegetal").val(energy);

    if (energy < 67){
        console.log("works")    
    }
    else {
        console.log("not working")
    }
}, 5000);

答案 1 :(得分:0)

@sherb的答案可能就是你所需要的。但是,如果您的代码更复杂,您可能希望将其分解为彼此不了解的不同部分。一种方法是通过某种信令系统连接各部分,例如匿名的PubSub / EventEmitter机制。那里有很多。使用全局events模块,这可能会将代码转换为以下内容:

(function() {
    var energy = 70; // local to this IIFE

    setInterval(function() {
        energy = energy -1;
        events.emit('energyChanged', energy);
    }, 5000);
}());

events.on('energyChanged', function(energy) {
    if (energy < 67){
        console.log("works")    
    } else {
        console.log("not working")
    }
});

正如我所说,这对你的案子来说可能有点过头了,但是当你的要求需要它时,这是一件好事。

答案 2 :(得分:0)

这是一种初学者友好的方式:

var energy = 70;
var period = 5000; //ms

var test67 = function() {
    energy = energy - 1;
    $("#energiegetal").val(energy);
    if (energy < 67) {
        console.log("67 works");
        setTimeout(test50, period);
    } else {
        setTimeout(test67, period);
    }
};

var test50 = function() {
    energy = energy - 1;
    $("#energiegetal").val(energy);
    if (energy < 50) {
        console.log("50 works");
        setTimeout(keepDropping, period);
    } else {
        setTimeout(test50, period);
    }
};

var keepDropping = function() {
    energy = energy - 1;
    $("#energiegetal").val(energy);
    setTimeout(keepDropping, period);
};

setTimeout(test67, period);

您可以在 JSBin 上看到它。有很多不喜欢这个,主要是与重复有关,但它应该是相当容易理解的。

我无法分辨你是否希望能量在你的第二个门槛之后继续下降。如果没有,您可以删除该功能以及引用它的setTimeout调用。

请注意setTimeoutsetInterval之间的区别。使用setTimeout,我们手动触发每个下一个调用。使用setInterval时,它们会不断发生,但要知道何时取消或更改使用的函数会更加困难。

另一种方法是为每个阈值使用标记,报告它们是否已运行,并每次检查标记以查看该阈值是否已被触发。

还有许多其他选择,几乎所有替代品都比这更短。但这与我想象的一样明确。