我想添加一个类,等待2秒钟后再添加另一个类。
.addClass("load").wait(2sec).addClass("done");
有没有什么方法?
我想添加一个类,等待2秒钟后再添加另一个类。
.addClass("load").wait(2sec).addClass("done");
有没有什么方法?
setTimeout函数会在一段时间延迟后执行一些代码(以毫秒为单位)。但是需要注意的是,由于JavaScript的特性,在定时器被设置后,其余的代码会继续运行。
$('#someid').addClass("load");
setTimeout(function(){
$('#someid').addClass("done");
}, 2000);
// Any code here will execute immediately after the 'load' class is added to the element.
.removeClass('load')
,否则你会添加两个类load和done,这可能是不希望的。如果你确实在等待异步操作完成,最好的方法是在它成功完成时使用.addClass
,如果不成功,则可以考虑使用.addClass('error')
。 - Gary Greendelay()无法胜任此任务。delay()的问题在于它是动画系统的一部分,只适用于动画队列。
如果你想在执行动画之外的操作前等待,该怎么办呢?
使用以下代码:
window.setTimeout(function(){
// do whatever you want to do
}, 600);
发生了什么?:在此场景中,它会等待600毫秒,然后执行花括号内指定的代码。
我一旦弄清楚了这个问题,就非常有帮助,希望它也能对你有所帮助!
重要通知:'window.setTimeout'是异步执行的。编写代码时请注意这一点!
请注意,这是一个旧问题,但我编写了一个插件来解决此问题,可能会有人觉得有用。
https://github.com/madbook/jquery.wait
可以让你做到这一点:
$('#myElement').addClass('load').wait(2000).addClass('done');
有一个函数,但它是额外的:http://docs.jquery.com/Cookbook/wait
这个小片段允许您等待:
$.fn.wait = function(time, type) {
time = time || 1000;
type = type || "fx";
return this.queue(type, function() {
var self = this;
setTimeout(function() {
$(self).dequeue();
}, time);
});
};
function sleep(milliseconds) {
var start = new Date().getTime();
for (var i = 0; i < 1e7; i++) {
if ((new Date().getTime() - start) > milliseconds){
break;
}
}
}
sleep(2000);
我认为我有一些可以帮助你的东西,那就是使用延迟对象(Deferred)。与$.when一起使用时,它会暂停直到任务完成,然后继续:它会搜索延迟对象元素。 你还可以链接事件,一个接一个地等待前一个完成后才能继续下一个。
$.when( $('#element').addClass('load'), $('#element').addClass('done') ).then(function(x) { console.info('Already done') });
xml4jQuery插件提供了sleep(ms,callback)方法。在睡眠期间,剩余的链将被执行。
$(".toFill").html("Click here")
.$on('click')
.html('Loading...')
.sleep(1000)
.html( 'done')
.toggleClass('clickable')
.prepend('Still clickable <hr/>');
.toFill{border: dashed 2px palegreen; border-radius: 1em; display: inline-block;padding: 1em;}
.clickable{ cursor: pointer; border-color: blue;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type="text/javascript" src="https://cdn.xml4jquery.com/ajax/libs/xml4jquery/1.1.2/xml4jquery.js"></script>
<div class="toFill clickable"></div>