javascript - JavaScript 停止间隔函数
问题描述
function setsTime(time, state){
var idsc = document.getElementById("scount");
var intervalId = null;
if(time != '-1' && state == true){
var totalSeconds = time;
intervalId = setInterval(setTime, 1000);
function setTime() {
++totalSeconds;
idsc.innerHTML = "00" + ":" + pad(parseInt(totalSeconds / 60)) + ":" + pad(totalSeconds % 60);
}
function pad(val) {
var valString = val + "";
if (valString.length < 2) {
return "0" + valString;
} else {
return valString;
}
}
}else{
console.log("stopppppping setsTime()");
clearInterval(intervalId);
idsc.innerHTML = "00:00:00";
return;
}
}
当执行此函数进行计数时,一切正常。但是,如果我进入 else 循环来停止该功能,那么计数器就不会反击。反击只是继续反击...... :((
解决方案
每当您调用setsTime
一个新间隔时,intervalId
都会创建一个新间隔。当您调用setsTime
杀死前一个间隔时,您实际上创建了一个新间隔并杀死它。要解决这个问题,只需声明intervalId
函数的外部,以便多个调用以相同的间隔工作。
推荐阅读
- vue.js - VueJS对齐递归组件
- php - foreach 循环遍历 json 值
- python - numpy/scipy中最小二乘拟合的多个系数集
- php - 对我的问题的任何建议或解决方案,将下拉列表中的选定列表项注入 php、mysql 中的其他表
- c# - MongoDB C# Equality override 没有被选中
- javascript - 使用选择框突出显示匹配的 html 单元格
- python - Python while true Condition 抛出语法错误
- linux - 构建 Linux Kernel 4.18 时出现编译时错误
- vba - VBA 运行循环,直到在 MsgBox 中有 X 个示例
- javascript - AWS DynamoDB 扫描操作适用于类级别扫描,但不适用于文档写入器扫描