gpt4 book ai didi

javascript - 我怎样才能让 clearInterval 停止我的计时器?

转载 作者:行者123 更新时间:2023-12-04 10:29:52 25 4
gpt4 key购买 nike

我有 2 个要单独运行的计时器。 'timer' 与第一个函数 'timePassed' 相关联,并且应该计数,直到我的生物的重要统计数据下降到 0,然后它应该停止。确实如此。但是,我的第二个计时器“timer2”链接到第二个功能“重新启动”。当统计数据达到 0 时,它并没有停止,这是我想要的。就像第一个一样。

我怀疑这可能与我在函数 2 'restart' 中运行 'timePassed'(function 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);


我尝试将 var timer2 分配给 timePassed()(如图所示)和 restart()。如果我使用restart(),我的计数器会上下跳动,不会减少到足以触发clearInterval。

如果我从restart() 和/或timer2 中删除'if' 语句,restart() 就不会倒计时。

最佳答案

经过一番思考,这是您面临的问题:

  • restart()永远不会进入它的if block ,因为您正在重新分配它预先检查的变量,这就是为什么第二个间隔永远不会被清除
  • 你正在运行两个完全相同的计时器,所以每秒 timePassed()被调用两次
  • 你调用 timePassed()再次在 restart()这不一定会导致问题,但肯定会增加 i 的值在您将其设置为 0 之后(弹跳计数器问题)

  • 所以,回答你的问题 - 停止 timer2一旦统计数据达到 0,您可以简单地移动 clearInterval(timer2)if block 内 timePassed()即调用 timePassed()在您重置统计数据和计数器之前,或者只是清除 restart() 中的两个间隔无需调用 timePassed() .这一切都意味着您将清除两个可能不是您想要的间隔。

    但是,查看您提供的代码,运行两个完全相同的计时器并没有多大意义——您可以只运行一个延迟一半的计时器并获得几乎相同的结果。

    关于javascript - 我怎样才能让 clearInterval 停止我的计时器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60466518/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com