清除间隔()不工作
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 中,如果variable
是 false
布尔值、null、未定义或空字符串,则 if (variable)
返回 false。否则,它返回true
。我在您的情况下添加了这个,因为此时不需要定义 myVar 或者它可能为 null以上是关于清除间隔()不工作的主要内容,如果未能解决你的问题,请参考以下文章