2012-04-25 72 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();