我有 2 个计时器,我想单独运行。 “timer”与第一个函数“timePassed”相关联,并且应该一直计数,直到我的生物的生命统计数据下降到 0,然后它应该停止。确实如此。但是,我的第二个计时器“timer2”链接到第二个函数“restart”。当统计数据达到0时它不会停止,这正是我想要的。就像第一个一样。
我怀疑这可能与我在函数 2“重新启动”中运行“timePassed”(函数 1)有关。我觉得计时器以 1 秒为间隔运行得太快,所以这是另一个线索。但我不确定,因为我对这一切都是新手。基本上,当统计数据达到 0 时,如何停止“timer2”?
//first function that works fine
function timePassed(){
message();
screen();
i++;
answer();
decrease();
changeStar();
changeDonut();
changeHeart();
if (health === 0 || happiness === 0 || hunger === 0){
dodo();
clearInterval(timer);
}
}var timer= setInterval(timePassed, 1000);
//second function whose timer isn't working correctly
function restart() {
i=0;
message();
health = 4;
happiness = 4;
hunger = 4;
screen();
timePassed();
if (health === 0 || happiness === 0 || hunger === 0){
dodo();
clearInterval(timer2);
}
} var timer2 = setInterval(timePassed, 1000);
我尝试将 vartimer2 分配给 timePassed() (如图所示)和 restart()。如果我使用 restart(),我的计数器会上下反弹,永远不会减少到足以触发clearInterval。
如果我从restart() 和/或timer2 中删除“if”语句,restart() 就会继续执行并且不会倒计时。
最佳答案
经过一番思考,以下是您面临的问题:
restart()
永远不会进入其if
block ,因为您要重新分配它事先检查的变量,这就是为什么第二个间隔永远不会被清除- 您正在运行两个完全相同的计时器,因此每秒都会调用两次
timePassed()
- 您在
restart()
中再次调用timePassed()
,这不一定会导致问题,但肯定会增加i
的值> 将其设置为 0 后(弹跳计数器问题)
因此,回答您的问题 - 要在统计数据达到 0 时立即停止 timer2
,您只需将 clearInterval(timer2)
移至 if
> 在 timePassed()
内阻塞,即在重置统计信息和计数器之前调用 timePassed()
,或者只是清除 restart()
中的两个间隔,而无需调用timePassed()
。但这一切都意味着您将清除两个间隔,这可能不是您想要的。
但是查看您提供的代码,运行两个完全相同的计时器没有多大意义 - 您可以只运行一个计时器,延迟一半,并获得几乎相同的结果。
关于javascript - 我怎样才能得到clearInterval来停止我的计时器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60466518/