JQuery fadeIn无法使用fadeOut
JQuery fadeIn not working with fadeOut
我正试图使用fadeIn和fadeOut制作一个旋转木马,但第一张图片会淡出,而下一张图片只会出现在后面。我想平稳过渡。我还根据从Codecademy中学到的知识构建了这个代码。我真的不能确定出了什么问题。我正在使用Bootstrap。
HTML:
<div class = "slidingPhotos" align="center">
<div class = "slide active-item">
<div class = "photo1">
<img src = "Images/mainImage.jpg"></img>
</div>
<div class = "description">
<h3> Welcome to O-Grocery! Your #1 Online Grocery Store </h3>
</div>
</div>
<div class = "slide ">
<div class = "container">
<div class = "photo1">
<img src = "Images/mainImage3.jpg"></img>
</div>
<div class = "description">
<h3> You have a thousand products to choose from at O-Grocery! </h3>
</div>
</div>
</div>
<div class = "slide">
<div class = "container">
<div class = "photo1">
<img src = "Images/mainImage2.jpg"></img>
</div>
<div class = "description">
<h3> You can guarantee 100% freshness of goods! </h3>
</div>
</div>
</div>
</div>
<div class ="footer" align="center">
<div class = "dots">
<div class = "arrow-prev">
<a href ="#"><img src = "Images/arrow-prev.png"></img></a>
</div>
<ul class="slider-dots">
<li class="dot active-dot">•</li>
<li class="dot">•</li>
<li class="dot">•</li>
</ul>
<div class = "arrow-next">
<a href ="#"><img src = "Images/arrow-next.png"></img></a>
</div>
</div>
</div>
JQuery
$('.arrow-next').click(function() {
var currentSlide = $('.active-slide');
var nextSlide = currentSlide.next();
var currentDot = $('.active-dot');
var nextDot = currentDot.next();
if(nextSlide.length === 0) {
nextSlide = $('.slide').first();
nextDot = $('.dot').first();
}
currentSlide.fadeOut('slow').removeClass('active-slide');
nextSlide.fadeIn('slow').addClass('active-slide');
currentDot.removeClass('active-dot');
nextDot.addClass('active-dot');
});
通过fadeIn
和fadeOut
的动画是异步的,因为你同时启动两个动画,所以当第一件事淡出时,第二件事已经淡出了。你基本上只需要以某种方式强制延迟第二个动画,要么确保在第一个动画完成后调用它,或者通过知道jQuery中的CCD_ 3速度是600毫秒。(来源:http://api.jquery.com/animate/)
使用.animate()
可以获得对动画的更多控制,但在这种情况下,也可以在第一个动画之后使用setTimeout()
来伪造动画,以确保它可以在第二个动画开始之前完成。
你可以直接从答案运行这个例子:
$('.arrow-next').click(function() {
var currentSlide = $('.active-slide');
var nextSlide = currentSlide.next();
var currentDot = $('.active-dot');
var nextDot = currentDot.next();
if(nextSlide.length === 0) {
nextSlide = $('.slide').first();
nextDot = $('.dot').first();
}
currentSlide.fadeOut('slow').removeClass('active-slide');
setTimeout(function(){ nextSlide.fadeIn('slow').addClass('active-slide'); }, 300);
currentDot.removeClass('active-dot');
nextDot.addClass('active-dot');
});
.slide { display: none; }
.slide.active-item {display:block;}
img {display:none;}
a {display:inline-block;background-color:#666;color:#fff;padding: 15px;margin:10px;}
.dots div {display:inline-block; }
.slidingPhotos { height: 55px; width: 500px; margin-bottom: 10px; display:block;background-color: #ccc; }
.slide { position: absolute; top: 10; height: 55px; width: 500px; text-align: center; color:Blue;font-family:"Segoe UI",Arial,"sans serif"; font-size:14px;}
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/themes/smoothness/jquery-ui.css" />
<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/jquery-ui.min.js"></script>
<div class = "slidingPhotos">
<div class = "slide active-item active-slide">
<div class = "photo1">
<img src = "Images/mainImage.jpg"></img>
</div>
<div class = "description">
<h3> Welcome to O-Grocery! Your #1 Online Grocery Store </h3>
</div>
</div>
<div class = "slide ">
<div class = "container">
<div class = "photo1">
<img src = "Images/mainImage3.jpg"></img>
</div>
<div class = "description">
<h3> You have a thousand products to choose from at O-Grocery! </h3>
</div>
</div>
</div>
<div class = "slide">
<div class = "container">
<div class = "photo1">
<img src = "Images/mainImage2.jpg"></img>
</div>
<div class = "description">
<h3> You can guarantee 100% freshness of goods! </h3>
</div>
</div>
</div>
</div>
<div class ="footer" align="center">
<div class = "dots">
<div class = "arrow-prev">
<a href ="#">PREVIOUS<img src = "Images/arrow-prev.png"></img></a>
</div>
<div class = "arrow-next">
<a href ="#">NEXT<img src = "Images/arrow-next.png"></img></a>
</div>
</div>
</div>
当函数异步时,您可以不同时观察fadeOut
和fadeIn
的影响:
currentSlide.fadeOut('slow').removeClass('active-slide'); <-|
nextSlide.fadeIn('slow').addClass('active-slide'); <-| starts together
使用animate()
和step
选项。CCD_ 10可以接受用于每个动画元素的每个动画属性的回调函数。此函数提供了修改Tween对象的机会,以便在设置属性之前更改属性的值。
相关文章:
- Jquery FadeIn FadeOut 只工作一次
- 使用条件语句,使 jquery fadeIn/fadeOut 仅在视口 >= 480px 时才有效
- fadeIn()和fadeOut()仅隐藏
- Jquery animation/fadeIn/fadeOut
- JavaScript timing, jQuery fadeIn fadeOut
- 成功使用 fadeIn() 和 fadeOut()
- Jquery fadeIn fadeOut on click (data attr)
- .fadeIn .fadeOut 会导致数组索引出现奇怪的行为
- fadeIn仅在未显示且fadeOut完成时显示
- jQuery fadeIn fadeOut"眨眼;在Chrome上,在FireFox和IE上运行良好
- fadeIn, fadeOut jQuery 代码片段
- JQuery触发菜单上的fadeIn和fadeOut
- fadeIn mousemove()上的导航-某个时间后fadeOut
- 如果我用fadeTogle替换fadeIn/fadeOut,为什么它不起作用
- CSS3 replacement for jQuery.fadeIn and fadeOut
- replaceWith&fadeIn/fadeOut-悬停后无法工作
- jQuery.fadeIn()和.fadeOut()回调在将代码重写为递归回调后无法正常工作
- jQuery fadeOut / fadeIn Chrome 中的滚动问题
- jQuery Stop fadeOut/fadeIn Loop
- jQuery框fadeOut/fadeIn在鼠标离开后闪烁