[英]How to fade out a set of HTML elements and then 1 of them fades in with jQuery?
看起来很简单。 我想要一个所有<div>
s到fadeOut()
,然后1个<div>
s到fadeIn()
。 但是我用这样的东西( jsfiddle with 3 <div>
s )得到了疯狂的行为
<a href="#" onclick="$('div').fadeOut(2000, function() {$('div#first').fadeIn();}); return false;">Show first div</a>
<br/>
<a href="#" onclick="$('div').fadeOut(2000, function() {$('div#second').fadeIn();}); return false;">Show second div</a>
<br/>
<a href="#" onclick="$('div').fadeOut(2000, function() {$('div#third').fadeIn();}); return false;">Show third div</a>
<br/>
<div style="display:none" id="first">First div</div>
<div style="display:none" id="second">Second div</div>
<div style="display:none" id="third">Third div</div>
有时旧的 div 和新的 div 会消失。 有时新的 div 会出现,淡出然后重新出现。
我认为发生的事情是,当所有div
的fadeOut
,每个人都调用了fadeIn
函数,这变得有点棘手。 那么这里有一个解决方案,以fadeIn
只毕竟已经淡出?
问题是您的回调被调用 3 次,在该 div 的动画完成后,每个匹配的 div 调用一次。
以下是jQuery 文档的摘录:
回调函数
如果提供,则在动画完成后触发回调。 这对于将不同的动画按顺序串在一起很有用。 回调不发送任何参数,但它被设置为正在设置动画的 DOM 元素。 如果对多个元素进行动画处理,请务必注意,回调对每个匹配的元素执行一次,而不是对整个动画执行一次。
从 jQuery 1.6 开始,.promise() 方法可以与 deferred.done() 方法结合使用,当所有匹配的元素都完成它们的动画时,为整个动画执行单个回调(请参阅 .promise 的示例() )。
这是您问题的解决方案:
<a href="#" onclick="$('div').fadeOut(2000);$('div').promise().done(function() {$('div#first').fadeIn();}); return false;">Show first div</a>
<br/>
<a href="#" onclick="$('div').fadeOut(2000);$('div').promise().done(function() {$('div#second').fadeIn();}); return false;">Show second div</a>
<br/>
<a href="#" onclick="$('div').fadeOut(2000);$('div').promise().done(function() {$('div#third').fadeIn();}); return false;">Show third div</a>
<br/>
<div style="display:none" id="first">First div</div>
<div style="display:none" id="second">Second div</div>
<div style="display:none" id="third">Third div</div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.