2012-04-25 48 views
29

一旦toggleClass完成后,我该如何做一个功能?我试过以下,但没有运气:toggleClass上的jquery函数完成?

$("#loader").toggleClass('fadeOut', function() { 
    alert('a'); 
}); 
+4

拨动类是直接的,你不需要为toggleClass回调,只需将'alert('a')'放在下一行,它将在toggleClass – 2012-04-25 18:16:52

+0

im试图让淡出后的$(“#loader”)隐藏()后提醒,我该怎么做? – panthro 2012-04-25 18:17:54

+0

即时消息试图让$(“#loader”)隐藏()后淡出,我该怎么做? - – panthro 2012-04-25 18:18:12

回答

68

的jQuery有一个返回延期对象,您可以访问使用.promise()承诺方法。在所选元素的所有运行动画完成后,该承诺对象将被解析。在这一点上,你可以绑定到它完成的方法。

$("#loader").toggleClass('fadeOut',600).promise().done(function(){ 
    alert('a'); 
}); 

http://jsfiddle.net/skram/4x76J/

+1

:)使用延迟对象+1。 – 2012-04-25 18:48:52

+13

该解决方案需要jQuery UI。 – Aryo 2013-11-10 07:51:58

+0

没有jquery ui它不会是一个动画,因此不会有回调。你的观点? – 2013-11-22 05:39:13

1

toggleClass立即执行,所以你不需要回调toggleClass,只需将alert('a')下一行执行toggleClass后会发出提示。

编辑:看起来像你想要的jQuery UI效果 - toggleClass不幸的是没有回调函数。

也许你应该写自己的切换功能。请参阅下面的淡入/淡出切换,

var $loader = $("#loader"); 
if ($loader.is(':visible')) { 
    $loader.fadeOut(100, function() { 
     alert('fade out complete'); 
    }); 
} else { 
    $loader.fadeIn(100, function() { 
     alert('fadeIn complete'); 
    }); 
} 
+0

即时消息试图让$(“#loader”)隐藏()后淡出,我该怎么做? - – panthro 2012-04-25 18:18:29

+0

@ user1013512看起来像jQuery UI中的toggleClass效果没有回调..查看我的更新后的帖子,让我知道如果这对你有用。 – 2012-04-25 18:24:26

+1

@Vega做'.toggleClass()'给出一个延期的对象?尝试'.toggleClass()。promise()。done(function(){alert(“done”)});'大多数动画方法如果不是全部都返回一个延迟对象。 – 2012-04-25 18:38:58

-1
$("#loader").stop().fadeTo(400,0, function() { 
     $(this).toggleClass('fadeOut').hide(); // exec after is faded out. 
     alert(' ta-da!'); 
    }); 
-1

我用其他的方法来处理这个问题。 在这个例子中,我结合.delay()功能和.queue()

$(this).toggleClass("focus_out").delay(500).queue(function(custom_call_back) { 
    $(this).removeClass('focus_out'); 
    custom_call_back(); 
}); 

在你的情况$(this)可能是$('#loader')

的jQuery:.delay();queue();