Answers:
您可以创建一个新的队列项来删除该类:
$("#div").addClass("error").delay(1000).queue(function(next){
$(this).removeClass("error");
next();
});
或使用出队方法:
$("#div").addClass("error").delay(1000).queue(function(){
$(this).removeClass("error").dequeue();
});
您需要调用next
或的原因dequeue
是让jQuery知道您已完成此排队项目,并且该项目应继续进行下一个项目。
AFAIK延迟方法仅适用于数字CSS修改。
出于其他目的,JavaScript附带了setTimeout方法:
window.setTimeout(function(){$("#div").removeClass("error");}, 1000);
我知道这是一篇非常老的文章,但是我将一些答案组合到了支持链接的jQuery包装器函数中。希望它能使某人受益:
$.fn.queueAddClass = function(className) {
this.queue('fx', function(next) {
$(this).addClass(className);
next();
});
return this;
};
这是一个removeClass包装器:
$.fn.queueRemoveClass = function(className) {
this.queue('fx', function(next) {
$(this).removeClass(className);
next();
});
return this;
};
现在您可以执行以下操作-等待1秒,添加.error
,等待3秒,删除.error
:
$('#div').delay(1000).queueAddClass('error').delay(2000).queueRemoveClass('error');
当然,如果像这样扩展jQuery,它将更加简单:
$.fn.addClassDelay = function(className,delay) {
var $addClassDelayElement = $(this), $addClassName = className;
$addClassDelayElement.addClass($addClassName);
setTimeout(function(){
$addClassDelayElement.removeClass($addClassName);
},delay);
};
之后,您可以使用此函数,例如addClass:
$('div').addClassDelay('clicked',1000);
return this
到函数中……
delay
在无队列功能上不起作用,因此我们应该使用setTimeout()
。
而且您不需要分离事物。您需要做的就是将所有内容都包含在一个setTimeOut
方法中:
setTimeout(function () {
$("#div").addClass("error").delay(1000).removeClass("error");
}, 1000);
试试这个:
function removeClassDelayed(jqObj, c, to) {
setTimeout(function() { jqObj.removeClass(c); }, to);
}
removeClassDelayed($("#div"), "error", 1000);
试试这个简单的箭头功能:
setTimeout( () => { $("#div").addClass("error") }, 900 );
$("#div").addClassTemporarily("error",1000)