javascript - 根据条件更改 setInterval 的 MS

标签 javascript

我正在尝试更改程序迭代数组并将信息放入文本区域的速度。但我不认为我完全理解 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);
        }
    })();
};

最佳答案

setTimeoutsetInterval 每次调用它们时都会创建一个新的计时器。如果您想要一个计时器,但更改其执行频率,那么您需要将其删除并“设置”一个新时间,如下所示:

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/

相关文章:

javascript - 使用 jquery 获取动态生成的标签的 Id 的问题

javascript - 如何获取元素的属性数据

javascript - 选择集合中的最后一个方括号输入元素

javascript - 结合 jQuery 准备 + 更改

javascript - 在移动设备上切换 bootstrap input-group-addon 和 input 的位置

javascript - 按国家/地区代码隐藏 div

javascript - 除了在源中放置图像之外,还有其他选择吗?

javascript - 如何将变量从 PHP 传递到 Javascript

c# - 如何在 ASP.NET MVC 验证期间提供警告?

javascript - 桌面 Safari 浏览器和 HTTP 直播