函数内部延迟jquery函数?

时间:2016-03-13 18:30:58

标签: javascript jquery html css

是否可以使功能空闲'在执行时几秒钟?

我试过

 setTimeout( function(){ 
      $("#nytLevel").hide();                        
 }  , 3000 );   

但是剩下的功能才会执行。

在setTimeout下面我启动一个函数

 function timer(){
      myVar = setTimeout( function(){ 
            console.log("SLOW");
      }  , 10000 );     
 }

但是当10秒钟过去了它就会控制台登录" SLOW",但它应该在13秒后控制台登录,因为我已经将setTimeout设置为3秒。

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%准确。引擎会在执行中寻找适当的中断来执行你想要的东西,但是如果引擎处于其他东西的中间,它将首先执行。