我有一个程序,其中一个 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/