我正在尝试更改程序迭代数组并将信息放入文本区域的速度。但我不认为我完全理解 setInterval 和 setTimeout 的功能,或者可能是其他东西,我对 JS 很陌生。
var theStage,getDrop,getSize,time,isChecked,turbo;
function changeFrame(stopper){
if(isChecked === true){
turbo = 50;
}
else{
turbo = 250;
}
time = setInterval(start, turbo);
}
function start(){
var frames = theStage.value.split("=====\n");
var i = 0, l = frames.length;
(function iterator() {
theStage.value = frames[i];
if(++i<l) {
setTimeout(iterator, turbo);
}
})();
};
最佳答案
setTimeout
和 setInterval
每次调用它们时都会创建一个新的计时器。如果您想要一个计时器,但更改其执行频率,那么您需要将其删除并“设置”一个新时间,如下所示:
var timer = null;
...
// Each time, before creating a new timer, remove the old one.
if (timer !== null)
clearInterval(timer)
timer = setInterval(...);
我认为,您的代码可以简化为仅使用一个计时器:
var theStage, isChecked, delay;
var frames = theStage.value.split("=====\n");
var progress = 0, l = frames.length;
function changeSpeed() {
if (isChecked)
delay = 50;
else
delay = 250;
}
function processFrame() {
theStage.value = frames[progress];
if (++progress < l)
// Recursively call self until whole list of frames is processed.
setTimeout(processFrame, delay);
}
当您使用setTimeout
创建递归函数时,您不需要重置计时器。
关于javascript - 根据条件更改 setInterval 的 MS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20663247/