我正在尝试先对div的内容进行.fadeOut()
,然后我想{div}关闭.slideToggle()
。我尝试过几件事:
$('#followUp').contents().fadeOut(650);
$('#followUp').delay(650).slideToggle();
$('#followUp').contents().fadeOut(function(){
$('#followUp').delay(650).slideToggle();
})
上述两种方法均无效。我怎么能让这个工作好吗?谢谢!
答案 0 :(得分:1)
如果“followUp”div中的标记由元素而不仅仅是文本节点组成,那么你的第一个例子大多有效,但在Firefox上失败,因为jQuery试图在任何文本上调用getComputedStyle
节点。而不是contents()
,您希望使用children()
或使用"#followUp *"
作为选择器(感谢您在his/her answer下的评论中指出这一点)。
淡出内容的问题在于,除非你做一些事情来对抗它,否则div将没有高度并快速关闭而不是根据需要滑动关闭。我的解决方案是淡化几乎隐形但不完全:
所以给出:
<div id="followUp">
<div>Contents</div>
<div>Click anywhere on these contents to trigger the effect</div>
</div>
然后:
var followUp = $('#followUp');
followUp.children().animate({
opacity: 0.1,
duration: 650
});
followUp.delay(650).slideToggle();
(我不会使用你的第二个例子(完成回调),因为完成回调将为
答案 1 :(得分:1)
答案 2 :(得分:1)
$.when(
$('#followUp').css({
height: $('#followUp').height()
}).find('*').fadeOut(650)
).then(function () {
$('#followUp').slideToggle();
});
也许?
备用版本(从zdrsh稍加提示):
$('#followUp').css('height', '+=0px').children().fadeOut(650).promise().done(function () {
$('#followUp').slideToggle();
});