2013-08-05 58 views
0

我有一個圖像滑塊,我把它們放入隨機的輸出順序,但我意識到,其中一個圖像不斷重複。有什麼辦法來防止使用Math.random()重複圖像?隨機圖像生成器,但從來沒有重複相同的圖像 - Javascript

這是我迄今所做的:http://jsfiddle.net/Y4jr6/

<script type="text/javascript" language="javascript"> 

//switch the landing page background images 
function slideSwitch() { 
    //set variable active 
    var $active = $('#slideshow IMG.active'); 

    //check if attribute active exists 
    if ($active.length == 0) $active = $('#slideshow IMG:last'); 

    // use this to pull the images in the order they appear in the markup 
    var $next = $active.next().length ? $active.next() 
     : $('#slideshow IMG:first'); 

    //throw images in random order 
    var $sibs = $active.siblings(); 
    var rndNum = Math.floor(Math.random() * $sibs.length); 
    var $next = $($sibs[rndNum]); 

    $active.addClass('last-active'); 

    $next.css({opacity: 0.0}) 
     .addClass('active') 
     .animate({opacity: 1.0}, 1000, function() { 
      $active.removeClass('active last-active'); 
     }); 
} 

$(function() { 
    setInterval("slideSwitch()", 7000); 
}); 

</script> 

任何幫助將不勝感激!

回答

3

想象它像一副撲克牌。列出所有要顯示的圖像,並在顯示後將其從列表中刪除(現在不會選擇重複項)。只要確保您生成的隨機數由當前列表長度限定即可。

+0

你有可能向我展示一個例子嗎?因爲我沒有線索甚至接近 – Elmer

+0

我希望我可以幫助更多,但我的JavaScript/jQuery知識並不是那麼棒。嘗試在http://jsfiddle.net/上創建一個完整的示例並編輯您的原始問題,然後其他人可以提供幫助。 –

+1

感謝您的幫助! :) – Elmer

2

一個好的方法是創建一個包含圖像索引(即0 ... n)的數組,然後對數組進行混洗,然後在數組中進行遞增。你可以隨時重新洗牌,當然如果你在陣列的單個「傳球」結束時重新洗牌,你可能會偶然重複。

+0

你能告訴我一個例子嗎?因爲我沒有線索甚至接近 – Elmer

+1

您是否搜索「使用Javascript的混洗陣列」?你一定很懶,顯然不是。 http://stackoverflow.com/questions/6274339/how-can-i-shuffle-an-array-in-javascript –

2

要實現不會重複的隨機順序,您可以執行以下操作。

在數組定義圖片:

var images = [img1, img2, img3, img4, ...]; //image objects or URLs 

現在實現一個自定義分類器,將隨機數組:

images.sort(randomize); 

function randomize() { 
    return 0.5 - Math.random(); 
} 

自定義分類器是通過比較一個a和b的值,並返回0等於< 0或> 0,具體取決於條件。這裏我們只是返回一個介於-0.5和+0.5之間的隨機值,這意味着這些項目也會隨機排序。

該陣列現在是隨機化的,你可以很好地重複它,知道它不會重複任何圖像,直到你重新開始。