首页 > 解决方案 > 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 循环来停止该功能,那么计数器就不会反击。反击只是继续反击...... :((

标签: javascriptcountersetinterval

解决方案


每当您调用setsTime一个新间隔时,intervalId都会创建一个新间隔。当您调用setsTime杀死前一个间隔时,您实际上创建了一个新间隔并杀死它。要解决这个问题,只需声明intervalId函数的外部,以便多个调用以相同的间隔工作。


推荐阅读