javascript - 我怎样才能得到clearInterval来停止我的计时器?

标签 javascript setinterval clearinterval

我有 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/

相关文章:

javascript - html中的复制命令用于chrome复制多个文本框

javascript - 验证 : how to modify the step's default color?

Javascript变量间隔

javascript - 具有公共(public)方法的 jquery 插件的clearInterval

javascript - clearInterval 会导致重定向吗?

javascript - 将嵌套组件孙子之间的事件发送到根组件

javascript - Windows上的 Node npm错误寻找工具版本

javascript - 使用 jQuery .promise() 调用 clearInterval()

javascript - 揭示模块内的计时器(回调)用于更新公共(public)属性

javascript - 重置并重复设置间隔