2011-05-27 19 views
3

无限循环我有下面的代码:4个图像与jQuery

$(document).ready(function() { 
    $('#imgone').hide().delay(500).fadeIn(1000).delay(4500).fadeOut(500); 
    $('#imgtwo').hide().delay(1500).fadeIn(1000).delay(3500).fadeOut(500); 
    $('#imgthree').hide().delay(2500).fadeIn(1000).delay(2500).fadeOut(500); 
}); 

它更像是一个操场用jQuery。那么,首先我想让第一张图像淡入,然后是第二张,然后是最后一张。在此之后,我希望所有图像在加载完成后淡出。

但我想两个新问题:

  1. 创建一个无限循环

  2. 使用超过3张图片,但只能一次显示3(我知道这可能会影响ID对改成别的东西)

任何想法?

我不会在这里发布我如何努力实现循环,只有一个有趣的方法:

$(document).ready(function() { 
    function runPics() { 
    $('#imgone').hide().delay(500).fadeIn(1000).delay(4500).fadeOut(500); 
    $('#imgtwo').hide().delay(1500).fadeIn(1000).delay(3500).fadeOut(500); 
    $('#imgthree').hide().delay(2500).fadeIn(1000).delay(2500).fadeOut(500); 
    } interval = setInterval(runPics, 3500); 
}); 

此代码太烂了,对不对? :P

+2

这既是真棒而可怕。 – sdleihssirhc 2011-05-27 07:35:20

+0

t:使用回调? http://api.jquery.com/fadeIn/ – Nick 2011-05-27 07:36:49

回答

5

尝试:

$(function(){ 
    var images = ['#imgone', '#imgtwo', '#imgthree'], 
     imgIx = 0; 

    (function nextImage(){ 
     $(images[imgIx++] || images[imgIx = 0, imgIx++]).hide().delay(500).fadeIn(1000).delay(1000).fadeOut(500, nextImage); 
    })(); 
}); 

​​


或在同一时间以显示随机图像,3:

<div id="parent"> 
    <div id="imgone" style="display:none;">one</div> 
    <div id="imgtwo" style="display:none;">two</div> 
    <div id="imgthree" style="display:none;">three</div> 
    <div id="imgfour" style="display:none;">four</div> 
    <div id="imgfive" style="display:none;">five</div> 
    <div id="imgsix" style="display:none;">six</div> 
</div> 

<script> 
$(function(){ 
    var images = ['#imgone', '#imgtwo', '#imgthree', '#imgfour', '#imgfive', '#imgsix'], 
     parent = $('#parent'); 

    (function nextImage(){ 
     var imgs = images.slice(); 
     for(var i=0; i<3; i++){ 
      parent.append(
       $(imgs.splice(0|Math.random() * imgs.length, 1)[0]).hide().delay(1000*i+500).fadeIn(1000).delay(4500-(1000*i)).fadeOut(500, i ? $.noop : nextImage) 
      ); 
     } 
    })(); 
}); 
</script> 

jsfiddle

+0

正在工作,但没有按要求的顺序:P – 2011-05-27 07:44:23

+0

也许我错过了你正在尝试做的事情:)那么你的意思是不是按要求的顺序? – 2011-05-27 07:45:51

+0

首先出现图像#3,然后#2,然后#1,然后#1淡出,然后#2淡出等等。我需要淡入#1,然后#2,然后#3。在此之后,他们都在同一时间淡出,并重新开始循环:) – 2011-05-27 07:49:08

2
$(document).ready(function() { 
    function runPics(){ 
     $('#imgone').delay(500).fadeIn(1000,function(){ 
      $('#imgtwo').fadeIn(1000,function(){ 
       $('#imgthree').fadeIn(1000,function(){ 
        $('#imgone').fadeOut(500,function(){ 
         $('#imgtwo').fadeOut(500,function(){ 
          $('#imgthree').fadeOut(500,function(){ 
           runPics(); 
          }) 
         }) 
        }) 
       }) 
      }) 
     }) 
    }; 
    runPics(); 
}); 

我会这样做。我认为完成每个部分更合乎逻辑,然后完成每个部分,然后移到下一个位,而不是从一开始就设置定时器的负载。

在所有其他事情完成后,循环只是从内部运行函数。

此代码未经测试。

编辑:在回应评论,我更新的代码...

$(document).ready(function() { 
    function runPics(){ 
     $('#imgone').delay(500).fadeIn(1000,function(){ 
      $('#imgtwo').fadeIn(1000,function(){ 
       $('#imgthree').fadeIn(1000,function(){ 
        $('#imgone').fadeOut(500) 
        $('#imgtwo').fadeOut(500) 
        $('#imgthree').fadeOut(500,function(){ 
         $('#imgone').attr({src:'alreadyCachedImage.jpg'}) 
         runPics(); 
        }) 
       }) 
      }) 
     }) 
    }; 
    runPics(); 
}); 
+0

感谢您的代码,但它不符合我的要求。我需要淡入#imgone,然后#imgtwo,然后#imgthree。在这之后,所有这些在同一时间淡出并重新开始循环:)并且如果可能的话“阅读/使用”更多的图像,但总是在一个组中仅显示其中的3个。 – 2011-05-27 07:57:28

+0

感谢您的回应代码。不过,我接受@ cwolves的代码,因为那个代码也覆盖了我的问题#2。祝你今天愉快! :) – 2011-05-27 08:32:33

+1

我试图用代码中的代码解决问题2:'$('#imgone')。attr({src:'alreadyCachedImage.jpg'})'但也许可以解释更多。此外,有人在这个问题上投了我一票 - 我想为什么。我的方法有问题吗? – 2011-05-27 09:25:00

5

我会做这样的事情:

$('document').ready(function() { 
    var $imgs = $('#slideshow > img'), current = 0; 

    var nextImage = function() { 
     if (current >= $imgs.length) current = 0; 
     $imgs.eq(current++).fadeIn(function() { 
      $(this).delay(3000).fadeOut(nextImage); 
     }) 
    }; 
    nextImage(); 
}); 

小提琴:http://jsfiddle.net/JbrXd/4/

+0

谢谢,但在你的代码中只有一个图像一次出现。我需要淡入#imgone,然后#imgtwo,然后#imgthree。在这之后,所有这些在同一时间淡出并重新开始循环:)并且如果可能的话“阅读/使用”更多的图像,但总是在一个组中仅显示其中的3个。 – 2011-05-27 08:17:49