清除间隔()不工作

Posted

技术标签:

【中文标题】清除间隔()不工作【英文标题】:clearInterval() not working 【发布时间】:2016-01-09 01:26:10 【问题描述】:

会话长度是定时器的开始时间,默认为25。isEven用于启动/停止定时器,如果isEven为false,定时器应该启动,如果是奇数则应该命中clearInterval,出于某种原因没有停止执行 tick() 函数(它倒计时)。

var count = 0;

function countdown(sessionLength) 
  var minutes = sessionLength - 1;
  var seconds = 60;
  var isEven = false;
  count++;

  if (count % 2 == 0) 
    isEven = true;
   else 
    isEven = false;
  

  var myVar = setInterval(tick, 1000);

  if (isEven == false) 
    function tick() 
      if (seconds > 0) 
        seconds--;
       else 
        minutes--;
        seconds = 59;
      

      if (minutes > 0) 
        document.getElementById("time").innerhtml =
          minutes.toString() + ":" + (seconds < 10 ? "0" : "") + seconds.toString();
       else 
        document.getElementById("time").innerHTML =
          "0:" + (seconds < 10 ? "0" : "") + seconds.toString();
      
    
   else 
    console.log("reached");
    clearInterval(myVar);
  
;

【问题讨论】:

当 setInterval 实际不存在时(因为它在 if 块中),您将 tick 传递给它 【参考方案1】:

tick() 函数声明移到if 块之外

【讨论】:

【参考方案2】:

setInterval 变量是本地变量。所以每次调用countdown时它的值都会被覆盖

。解决方案是在函数 countdown 之外初始化 myVar 或使其成为像这样的全局变量:window.myVar =setInterval (tick,1000);

您还必须将此指令放在第一个 if 块中,以免每次都被覆盖

var count = 0;  
function  countdown(sessionLength)   
var minutes = sessionLength - 1; 
var seconds = 60; 
var isEven = false; 
count++; 
if (count % 2 == 0)  
    isEven = true; 
 else  
    isEven = false;
 
if (isEven == false)  
    window.myVar = setInterval(tick, 1000);
   function tick()  
      if (seconds > 0)   
          seconds--;  
       else   
          minutes--; seconds = 59;  
       
      if (minutes > 0)    
         document.getElementById("time").innerHTML = minutes.toString() + ":" + (seconds < 10 ? "0" : "") + seconds.toString();  
      else  
          document.getElementById("time").innerHTML = "0:" + (seconds < 10 ? "0" : "") + seconds.toString(); 
      
    
 else  
     console.log("reached");  
     if (window.myVar)  
          clearInterval(window.myVar); 
          window.myVar = null;
      
 
;

【讨论】:

感谢您的回复。在最后一个 if 语句 if(window.myVar) 评估什么?如果 myVar 不是布尔类型,它如何执行语句? javascript 中,如果 variablefalse 布尔值、null、未定义或空字符串,则 if (variable) 返回 false。否则,它返回true。我在您的情况下添加了这个,因为此时不需要定义 myVar 或者它可能为 null

以上是关于清除间隔()不工作的主要内容,如果未能解决你的问题,请参考以下文章

如何在函数内清除此 setInterval?

SQL:计算两个时间间隔之间的工作时间

React hooks - 清除超时和间隔的正确方法

Cache._cache.flush_all () 不工作,如何使用 django 和 memcached 清除缓存?

如何清除卡住/陈旧的 Resque 工作人员?

MyEclipse如何清除废弃的工作空间