jQuery的:我可以调用addClass()之间的延迟()等?
一些简单的事情:
$("#div").addClass("error").delay(1000).removeClass("error");
似乎没有工作。 什么是最简单的select?
你可以创build一个新的队列项来完成你删除的类:
$("#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的CSS操作不是排队的,但可以通过执行以下操作在“fx”队列中执行:
$('#div').delay(1000).queue('fx', function() { $(this).removeClass('error'); });
与调用setTimeout完全相同,但使用jQuery的队列机制。
我知道这是一个很老的post,但我已经把一些答案结合到一个支持链接的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
,等3secs,删除.error
:
$('#div').delay(1000).queueAddClass('error').delay(2000).queueRemoveClass('error');
延迟在队列上运行。 而据我所知,css操作(除了通过animation)不排队。
当然,如果你像这样扩展jQuery,会更简单:
$.fn.addClassDelay = function(className,delay) { var $addClassDelayElement = $(this), $addClassName = className; $addClassDelayElement.addClass($addClassName); setTimeout(function(){ $addClassDelayElement.removeClass($addClassName); },delay); };
之后,你可以使用像addClass这样的function:
$('div').addClassDelay('clicked',1000);
尝试这个:
function removeClassDelayed(jqObj, c, to) { setTimeout(function() { jqObj.removeClass(c); }, to); } removeClassDelayed($("#div"), "error", 1000);