是否可以使功能空闲'在执行时几秒钟?
我试过
setTimeout( function(){
$("#nytLevel").hide();
} , 3000 );
但是剩下的功能才会执行。
在setTimeout下面我启动一个函数
function timer(){
myVar = setTimeout( function(){
console.log("SLOW");
} , 10000 );
}
但是当10秒钟过去了它就会控制台登录" SLOW",但它应该在13秒后控制台登录,因为我已经将setTimeout设置为3秒。
答案 0 :(得分:3)
setTimeout()
只是安排将来运行的东西,其余的Javascript继续运行。它不会阻止进一步的Javascript执行。这通常称为“异步”操作。它在后台运行,并在将来完成其工作时调用回调。它也被称为“非阻塞”,因为它不会阻止Javascript执行的其余部分。
在setTimeout()
点火之前你想要运行的任何东西都必须放在setTimeout()
回调中或从那里调用。
// define function
function timer(){
myVar = setTimeout(function() {
console.log("SLOW");
}, 10000);
}
// schedule first timer
setTimeout(function() {
$("#nytLevel").hide();
// now start second timer
timer();
}, 3000);
值得一提的是,jQuery有一个.delay()
方法,可以处理队列中的动画和其他函数,有时可以简化代码。在上面的例子中,你可以这样做:
$("#nytLevel").delay(3000).hide().delay(10000).queue(function(next) {
console.log("SLOW");
next(); // keep the queue moving in case there's something else in the queue
});
请注意.delay(xxx)
仅适用于本身使用队列的jQuery方法(例如动画)或使用.queue()
自行放入队列的方法(如上所示)。
答案 1 :(得分:1)
setTimeout()
是一个异步函数,这意味着代码在setTimeout()
时间完成之前不会暂停。如果您希望代码与setTimeout()
一起延迟,则可以将其他代码放在最初的setTimeout()
setTimeout( function(){
$("#nytLevel").hide();
myVar = setTimeout( function(){
console.log("SLOW");
} , 10000 );
} , 3000 );
答案 2 :(得分:1)
我不推荐这个,但你可以设计一个递归函数来做你想要的事情,在超时之前或之后用一个标记来指示。在下面的示例中,您可以将其称为runAfterTimeout()
或runAfterTimeout(false)
function runAfterTimeout(run) {
if (! run) {
console.log('about to wait 10 seconds');
setTimeout(function(){runAfterTimeout(true)},10000);
return;
}
console.log('this section runs after 10 seconds');
setTimeout(function(){$("#nytLevel").hide();},3000);
}
小提琴:https://jsfiddle.net/m9n1xxra/
请记住,超时不是100%准确。引擎会在执行中寻找适当的中断来执行你想要的东西,但是如果引擎处于其他东西的中间,它将首先执行。