2011-05-27 23 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