jQuery添加类,等等,然后更改该类?
我需要在单击元素时添加一个类(例如转换),然后等待1秒并更改该类(例如完成转换) 我试过这个:jQuery添加类,等等,然后更改该类?,jquery,Jquery,我需要在单击元素时添加一个类(例如转换),然后等待1秒并更改该类(例如完成转换) 我试过这个: $(this).addClass('transition').delay(1000).addClass('active'); 更新-为什么以下操作不起作用?当我取消注释警报时,我可以看到它在正确的时间触发,但是addClass和removeClass被忽略 $('.target').click(function() { $(this).addClass('transition');
$(this).addClass('transition').delay(1000).addClass('active');
更新-为什么以下操作不起作用?当我取消注释警报时,我可以看到它在正确的时间触发,但是addClass
和removeClass
被忽略
$('.target').click(function() {
$(this).addClass('transition');
$('.target').not(this).removeClass('active transition');
setTimeout(function(){
$(this).removeClass('transition');
$(this).addClass('active');
// alert('test');
},300);
});
$('p').css('color','red')。延迟(1000)。队列(
功能(aaa)
{
$(this.css('color','green');
$(this).dequeue();//$('p').css('color','red').delay(1000).queue(
功能(aaa)
{
$(this.css('color','green');
$(this).dequeue();//您可以使用setTimeout(),如下所示:
$('.target').click(function () {
var $target = $(this);
$target.addClass('transition');
$('.target').not(this).removeClass('active transition');
setTimeout(function () {
$target.removeClass('transition').addClass('active');
}, 1000);
});
$('.target').click(function () {
$(this).addClass('transition');
$('.target').not(this).removeClass('active transition');
setTimeout($.proxy(function () {
$(this).removeClass('transition').addClass('active');
}, this), 1000);
});
我认为代码的问题在于,您试图在传递给setTimeout()的函数中使用$(this)
,但在该函数中this
不引用元素。上面的代码通过定义$target
变量来避免这种情况
修复代码的另一种方法是使用$.proxy()
函数设置回调函数的上下文,如下所示:
$('.target').click(function () {
var $target = $(this);
$target.addClass('transition');
$('.target').not(this).removeClass('active transition');
setTimeout(function () {
$target.removeClass('transition').addClass('active');
}, 1000);
});
$('.target').click(function () {
$(this).addClass('transition');
$('.target').not(this).removeClass('active transition');
setTimeout($.proxy(function () {
$(this).removeClass('transition').addClass('active');
}, this), 1000);
});
可以使用setTimeout(),如下所示:
$('.target').click(function () {
var $target = $(this);
$target.addClass('transition');
$('.target').not(this).removeClass('active transition');
setTimeout(function () {
$target.removeClass('transition').addClass('active');
}, 1000);
});
$('.target').click(function () {
$(this).addClass('transition');
$('.target').not(this).removeClass('active transition');
setTimeout($.proxy(function () {
$(this).removeClass('transition').addClass('active');
}, this), 1000);
});
我认为代码的问题在于,您试图在传递给setTimeout()的函数中使用$(this)
,但在该函数中this
不引用元素。上面的代码通过定义$target
变量来避免这种情况
修复代码的另一种方法是使用$.proxy()
函数设置回调函数的上下文,如下所示:
$('.target').click(function () {
var $target = $(this);
$target.addClass('transition');
$('.target').not(this).removeClass('active transition');
setTimeout(function () {
$target.removeClass('transition').addClass('active');
}, 1000);
});
$('.target').click(function () {
$(this).addClass('transition');
$('.target').not(this).removeClass('active transition');
setTimeout($.proxy(function () {
$(this).removeClass('transition').addClass('active');
}, this), 1000);
});
你能告诉我们你试过什么吗?2100这么重复,没有代码吗?伙计!你能告诉我们你试过什么吗?2100这么重复,没有代码吗?伙计!你可能想解释一下addClass
不会直接与动画队列混在一起(因此delay
)。您可能想解释一下,addClass
不会直接与动画队列混合(因此,delay
)。