我无法弄清楚如何在淡出循环中使用简单的淡入淡出功能。你可以告诉我,我对jQuery很新。我已经开始了,但是现在花了很长时间才算完,所以我想我会请求一些帮助。
我想做什么:
我有两张图片,ID是#img1和#img2。我想图像1淡入然后等待让我们说6秒然后淡出。我已经尝试了.wait函数,但它只是停止了我工作的那一点。我设法让第一张图像淡入淡出,但之间没有等待。然后我想开始淡入图像2而图像1淡出然后图像2等待然后淡出而图像1再次淡入并永远循环!希望这是有道理的。
$(document).ready(function(){
$('#img1').hide()
.load(function () {
$(this).fadeIn(4500)
.fadeOut(4500);
$('#img2').hide().wait(9000)
.load(function () {
$(this).fadeIn(4500)
.fadeOut(4500);
});
干杯,它让我疯狂。 Ps你可以尝试给你答案中的一些解释。感谢
答案 0 :(得分:10)
这是一个四图像循环幻灯片,它不使用setTimeout函数,而是使用延迟函数。
<script>
function startSlideshow(){
$("div.text_b1").fadeIn(1000).delay(10500).fadeOut(1500); //13000
$("div.text_b2").delay(13000).fadeIn(1500).delay(11000).fadeOut(1500); //27000
$("div.text_b3").delay(27000).fadeIn(1500).delay(11000).fadeOut(1500); //41000
$("div.text_b4").delay(41000).fadeIn(1500).delay(11000).fadeOut(1500, startSlideshow); //55000
}
$(document).ready(function(){
startSlideshow();
});
</script>
中查看
答案 1 :(得分:6)
为什么不使用像Cycle plugin那样的解决方案?
它有很多选项而不是你想做的。
如果你真的需要自己做,你可以看一下插件的源代码。我没有这样做,但我认为编码器使用animate函数(来自jQuery)和setTimeout函数(来自纯javascript)的组合。使用这些功能,他必须做一些事情,比如在一段时间内启用计时器,当时间完成后,他执行动画功能,将图像的不透明度设置为0(对于图像隐藏)和1(对于图像显示)。
答案 2 :(得分:4)
2年后编辑:有更好的方法可以做到这一点......所以请忽略这个答案。
我会尝试回调和setTimeout的组合。 (我打算以Kobi的回答为基础,因为他在我打字时发布了。)
在CSS中,给两个图像一个“display:none;”而不是在jQuery开始时将它们设置为隐藏。然后在jQuery中:
function imageOneFade(){
$('#img1').fadeIn(2000, function(){ setTimeout("$('#img1').fadeOut(2000); imageTwoFade();",6000); });
}
function imageTwoFade(){
$('#img2').fadeIn(2000, function(){ setTimeout("$('#img2').fadeOut(2000); imageOneFade();",6000); });
}
$(document).ready(function(){
imageOneFade();
});
希望你工作的那样。
setTimeout函数有两个参数。
setTimeout(WHAT WILL HAPPEN, HOW LONG TO WAIT)
fadeIn / Out函数可以有第二个参数,当效果结束时会触发。
答案 3 :(得分:1)
您可以结合使用jQuery的回调和JavaScript setTimeout
setTimeout用于延迟,并在动画完成后使用回调(尽管还有许多其他回调)。
function startSlideshow(){
$('#p1').fadeOut(2000, function(){
setTimeout(function(){
$('#p1').fadeIn(2000, startSlideshow)
},1000);
});
}
$(document).ready(function(){
startSlideshow();
});
查看实际操作:http://jsbin.com/ulugo
答案 4 :(得分:0)
基于delay()函数,如果需要更大数量的图像循环,这里是图像数量的解决方案。这给出了B-> A交叉渐变效果(或者移除 + fadems / 2 以获得简单的fadeOutIn效果)。心灵 - 图像必须在位:绝对!重要; (参见html示例)。
<强> jQuery的:强>
function startSlideshow(){
var dms = 2500; // image show duration in ms
var fadems = 750; // crossfade in ms
var imgnum = 5; // total number of images
var nms = 0;
// fadeInOut first image
$("#img1").fadeIn(fadems).delay(dms).fadeOut(fadems);
nms = nms + fadems*2 + dms- fadems/2;
// fadeInOut rest images
for (var i = 2; i<imgnum; i++){
// remove +fadems/2 for fadeOut effect, instead of crossfade
$("#img"+i).delay(nms).fadeIn(fadems).delay(dms).fadeOut(fadems+fadems/2);
nms = nms + fadems*2 + dms - fadems/2;
}
// fadeInOut last image and start over
$("#img"+imgnum).delay(nms).fadeIn(fadems).delay(dms).fadeOut(fadems, startSlideshow);
}
startSlideshow();
HTML:注意:下一张图片ID由++提升:#img1,#img2,#img3 ....#img128等。
<style>
.crossfade {
/* image width and height */
width: 160px;
height: 120px;
display: none;
position: absolute !important;
}
</style>
<div class="place_your_images_container_where_is_needed">
<div id="img1" class = "crossfade" >
<img src="imageOne.png" />
</div>
<div id="img2" class = "crossfade" >
<img src="image2.png" />
</div>
<div id="img3" class = "crossfade" >
<img src="image3.png" />
</div>
<div id="img4" class = "crossfade" >
<img src="imageFour.png" />
</div>
<div id="img5" class = "crossfade" >
<img src="imageLast.png" />
</div>
</div>
P.S。使用透明的PNG图像以获得更好的效果。
答案 5 :(得分:0)
这就是我用简单的jQuery做的方法。请参阅工作代码段。
loopStart();
function loopStart() {
$("#image1").delay(2000).fadeOut("slow", function() {
loopTwo();
});
};
function loopOne() {
$("#image1").fadeIn("slow", function() {
$("#image1").delay(2000).fadeOut("slow", function() {
loopTwo();
});
});
};
function loopTwo() {
$("#image2").fadeIn("slow", function() {
$("#image2").delay(2000).fadeOut("slow", function() {
loopOne();
});
});
};
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<img id="image1" src="http://lorempixel.com/city/200/200">
<img id="image2" style="display:none;" src="http://lorempixel.com/people/200/200">