2014-11-08 94 views
0

我有一個頁面,其中包含許多使用javascript在每2秒鐘隨機切換一個類的切片。我想添加一個檢查,以便它不連續兩次切換同一個圖塊。像這樣的東西,但這不起作用。使用Javascript檢查隨機數是否與上一次相同

$(document).ready(function() 
{ 
var gcFlip = $('.flip').find('div'); 
var sameImg; 
function flip() 
{ 
    if (gcFlip.length >= 1) 
    { 
     var nextImg = gcFlip[Math.floor(Math.random() * gcFlip.length)]; 
      while(nextImg === sameImg) 
       { 
        var nextImg = gcFlip[Math.floor(Math.random() * gcFlip.length)]; 
       } 
     nextImg = sameImg; 
     $(nextImg).toggleClass('transition'); 
    } 
} 
setInterval(flip, 2000); 
}); 
+1

您不在任何位置初始化sameImg,因此它始終未定義。 – 2014-11-08 17:51:06

+3

它應該是'sameImg = nextImg'而不是'nextImg = sameImg;'並且'var nextImg'兩次 – 2014-11-08 17:53:41

+0

如果後期處理隨機數,它們不再是隨機數。這在這種情況下可能沒有什麼區別,但這通常是一種不好的做法。 – 2014-11-08 17:55:35

回答

0

有幾個問題在這裏(@一 - 沃爾夫打幾個鍵),

  1. 封閉範圍,移動gcFlip & currentImg文檔準備功能之外 - nextImg正在重新定義每個循環內的時間。將flip()函數移出了在doc ready f(x)中定義的內容。

  2. 您在轉換之前設置了您的'當前圖像'指針,並且該任務已翻轉(無雙關語),因此您在調用轉換之前將nextImg重置爲當前圖像。

這應該更接近你要找的。

var gcFlip; 
var currentImg; 

$(document).ready(function(){ 
    var gcFlip = $('.flip').find('div'); 
    setInterval(flip, 2000); 
}); 

function flip() 
{ 
    if (gcFlip.length >= 1) 
    { 
     var nextImg = gcFlip[Math.floor(Math.random() * gcFlip.length)]; 
     while(nextImg == currentImg) 
     { 
     nextImg = gcFlip[Math.floor(Math.random() * gcFlip.length)]; 
     } 
     $(nextImg).toggleClass('transition'); 
     currentImg = nextImg; 
    } 
} 
相關問題