javascript - setTimeout() 函数运行无延迟

标签 javascript jquery css recursion settimeout

我有一个程序,其中一个 html 按钮调用一个 jQuery 函数(称之为 funcOne)。该函数依次调用一个递归函数(称为 funcTwo),该函数更改 DOM 中的某些 CSS。 funcTwo 包含两个 setTimeout() 调用来延迟 CSS 更改,创建一种闪烁效果。

funcOne 看起来像这样:

function funcOne(stringOfNumbers){

    //This function does some other stuff that does not interfere with funcTwo
    someUnrelatedFunction(); 

    funcTwo(time);

    return;
}

funcTwo 看起来像这样:

function funcTwo(time){

    if(time == ""){return true;}

    var delay = time.charAt(0);
    var numDelay = parseInt(delay);

    setTimeout(function(){
        $("#container").css("background-color", "white");
        console.log("Changed to white");
    }, 1000); //Arbitrary delay

    setTimeout(function(){
        $("#container").css("background-color", "black");
        console.log("Changed to black");
    }, numDelay); //Variable delay

    time = time.substr(1);

    return funcTwo(time);

}

控制台显示这两条消息,所以我知道脚本正在运行。我没有收到任何堆栈溢出错误。 但是,两种延迟(任意和可变)都不会运行。 #container 立即变黑。

我做错了什么?非常感谢任何帮助。

最佳答案

我看到的一个问题是,在它变为黑色之前您允许的最大延迟是 9 毫秒。因为你给第二个变量 delay 时间变量的第一个字符的值,最大的 1 个字符数是 9。如果你想先将背景颜色运行为白色,我会移动第二个 setTimeout( ) 到第一个 setTimeout() 内部,以允许它仅准备在背景为白色后运行。 setTimeout() 已准备就绪,不会立即运行该函数。这允许在您的代码中,在函数实际运行之前运行 setTimeout() 之后的代码。

关于javascript - setTimeout() 函数运行无延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49703201/

相关文章:

javascript - 通过单选按钮更改图像,用户可以选择

jquery - Bootstrap 崩溃延迟显示

javascript - jquery click 事件交换文本在第一次点击时不触发但在之后工作

Javascript:单击后更改按钮文本。 event.target 不起作用

javascript - VS代码,编写绘制图表的扩展

javascript - javascript 确认如何工作?

javascript - 将绝对定位元素右对齐到其祖先的边缘

javascript - 根据选择的下拉菜单运行特定功能

javascript - 如何让两个或多个组件相互监听并在其他组件打开时关闭

javascript - 如何在 vue.js 中使用属性选择器?