jQuery延迟无法正常工作

the*_*gah 63 jquery

$('.transparent').removeClass('transparent').delay(2000).addClass('not_transparent').delay(4000)
Run Code Online (Sandbox Code Playgroud)

我有一个半透明的div,然后想把它切换到不透明.但是jQuery .delay(); 方法在这里似乎不起作用.我试过.fadeIn(); 相反,这有效延迟但它不适用于改变类.

use*_*716 137

.delay()用于属于a的项目queue,如动画.一个简单addClass的不排队.

你可以用setTimeout.

var trans = $('.transparent').removeClass('transparent');
setTimeout(function() {
    trans.addClass('not_transparent');
}, 2000);
Run Code Online (Sandbox Code Playgroud)

作为替代方案,您可以使用非排队项目添加到队列中.queue(),但我认为setTimeout会更好.

$('.transparent').removeClass('transparent').delay(2000).queue(function(nxt) {
      $(this).addClass('not_transparent');
      nxt();
});
Run Code Online (Sandbox Code Playgroud)

  • 好的,这就是原因.合理.setTimeout它是:) (3认同)
  • @Sam:它非常简单,也是一个原生实现.我不知道`queue()`涉及到什么样的开销,但我确定它比`setTimeout`要多得多. (3认同)
  • 为什么你认为 setTimeout 更好? (2认同)

Lew*_*wis 6

我知道这是一个老问题,但是Google仍然有很多流量,所以我加两分钱。

您可以使用类似-

$('.transparent').fadeIn().delay(500).queue(function(){
  $('.transparent').addClass('yourclass');
});
Run Code Online (Sandbox Code Playgroud)

您可以将函数传递到队列,以便在延迟后执行它们。我自己已经将其用于非常相似的示例。