对计时器中的数据执行某些操作
Do something with data from timer
我有一个问题。我想做的是:我有一个间隔函数正在运行。每 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")
}
您的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);
@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")
}
});
正如我所说,这对您的情况来说可能是矫枉过正的,但是当您的要求需要时,这是一件好事。
这是一种适合
初学者的方法:
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
调用。
请注意setTimeout
和setInterval
之间的区别。 使用 setTimeout
,我们手动触发每个下一个调用。 随着 setInterval
,它们不断发生,但更难知道何时取消或更改使用的功能。
使用标志,报告它们是否已运行,并每次检查标志以查看该脱粒是否已被触发。
还有许多其他选择,几乎所有方法的代码都比这短。 但这和我能想象的一样明确。
相关文章:
- Jquery表单验证插件-如果选中复选框,如何在提交时执行某些操作
- Google 脚本:用于创建日历活动的脚本运行时不会出错,但不会执行任何操作
- 当通过AJAX调用时,控制器操作不会执行
- jQuery-将列表项的一个元素移动到同一项的另一个元素中+对我的列表中的每个项执行此操作
- 点击:更改位置后执行某些操作
- 无法执行文件.退出Acrobat PDF中的操作
- 从表单中获取用户输入执行计算(操作顺序)并输出回该表单
- 如何在ListView项模板中获取按钮来执行不同的操作
- 单击元素两次后执行操作
- ReactJS只有在操作完成后才能执行某些操作
- toogleClass函数来切换元素类并在事件期间执行某些操作
- jQuery/Javascript foreach If/Else |如果为空(不执行任何操作)Else(显示forea
- Var工作,但在使用数组执行相同操作时停止
- 如何在mvc3中执行操作而不更改当前页面
- jQuery:$.ajax() 重定向到其 URL 表单操作参数,而不是对表单操作执行 AJAX 请求
- 如何为多个操作执行简单的 jQuery
- Redux 转换到操作执行后
- 反流操作执行后触发通知/回调
- jquery如果按钮点击了执行其他操作执行其他操作
- 在操作执行之前禁用锚链接