【发布时间】:2010-03-24 17:46:28
【问题描述】:
一些简单的事情:
$("#div").addClass("error").delay(1000).removeClass("error");
似乎不起作用。最简单的选择是什么?
【问题讨论】:
-
想做同样的事情。打电话给
$("#div").addClassTemporarily("error",1000)会很酷
一些简单的事情:
$("#div").addClass("error").delay(1000).removeClass("error");
似乎不起作用。最简单的选择是什么?
【问题讨论】:
$("#div").addClassTemporarily("error",1000)会很酷
您可以创建一个新的队列项来删除课程:
$("#div").addClass("error").delay(1000).queue(function(next){
$(this).removeClass("error");
next();
});
或者使用dequeue方法:
$("#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 的 CSS 操作没有排队,但您可以通过以下方式使其在“fx”队列中执行:
$('#div').delay(1000).queue('fx', function() { $(this).removeClass('error'); });
与调用 setTimeout 完全一样,但使用的是 jQuery 的队列机制。
【讨论】:
当然如果你像这样扩展 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 添加到函数中...
延迟对队列进行操作。据我所知,css操作(除了通过动画)没有排队。
【讨论】:
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").addClass("error");
setTimeout(function () { $("#div").removeClass("error"); }, 1000);
【讨论】:
$("#div").addClass("error").show(0).delay(1000).removeClass("error");
稍后谢谢我。
【讨论】: