setTimeout函数不会停止执行

setTimeout function doesnt stop execution?

本文关键字:执行 函数 setTimeout      更新时间:2023-09-26

我偶然发现了setTimeout的一个问题。

$current.removeClass(class2);
setTimeout(function(){$current.css('display', 'none')},1000);
if(!$current.is('#' + id)){
    $('#' + id).css('display','block');
    setTimeout(function(){$('#' + id).addClass(class2)}, 1000);
    $current = $('#' + id);
}

我希望在添加css"display:none"之后执行if语句。我怎样才能做到这一点?我认为setTimeout会停止代码的执行,然后在函数运行后继续。

您在超时内将代码放入函数中(代码间距也很重要…):

$current.removeClass(class2);
setTimeout(function() {
    $current.css('display', 'none')
    if( !$current.is('#' + id) ) {
        $('#' + id).css('display','block');
        setTimeout(function() {
            $('#' + id).addClass(class2)
        }, 1000);
        $current = $('#' + id);
    }
},1000); 

setTimeout将在n毫秒后运行该函数,但脚本的其余部分将继续运行。

如果你想让代码的其余部分在display:none之后才运行,你也需要把它移到函数中:

$current.removeClass(class2);
setTimeout(function(){
  $current.css('display', 'none');
  if(!$current.is('#' + id)){
    $('#' + id).css('display','block');
    setTimeout(function(){
        $('#' + id).addClass(class2);
    }, 1000);
    $current = $('#' + id);
  }
},1000);