2016-11-28 34 views
0

我爲網格庫製作了這個腳本,它每3秒鐘隨機更改一次圖像,通過更改其srcset屬性,總是有15個可見圖像,但數組已製作出來28,而且因爲它的隨機發生有時會發生3個或更多的相同的圖像,所以有15個機會是相同的(瘋狂的小機會,但你明白我的觀點),我想以某種方式阻止它。在圖庫網格中隨機給出像img,srcs這樣的屬性

我在考慮以某種方式定義最多可能有2個相同的屬性,所以如果其中有2個屬性,它不會將其他img更改爲該屬性。或者,如果可能的話,這將是完美的,只有一個屬性可見,它不會將其添加到其他img,如果有確切的屬性。

即使擁有最多2個相同的屬性,我仍然可以確定,因爲它可以最大限度地減少同時看到它們的機會,因爲一半是隱藏的,它可以防止3個或更多。

繼承人的jQuery的:

$(function() { 
    //array 
    var dice = $('.attachment-lenslight_squares').map(function() { 
     return $(this).attr('srcset') 
    }).get(); 

    $('.attachment-lenslight_squares') 
     .click(function() { 
      var num = Math.floor(Math.random() * dice.length); 
      $(this).fadeOut(200, function() { 
       $(this).attr('srcset', dice[num]); 
      }).fadeIn(200); 
     }); 

    setInterval(function() { 
     var rand = Math.floor(Math.random() * 15); 
     $('.attachment-lenslight_squares').eq(rand).click(); 
    }, 3000); 

}); 

感謝想法

+1

將28個可能的值放入數組中,按隨機順序排序,取前15個項目。 – pawel

+0

@pawel這不會工作,因爲所有28都是uniqe,我需要的是添加的屬性不重複(或至多2存在),因爲有一個從陣列每3秒添加一個,啊我不好解釋它 –

+0

但是你已經把它們放在'dice'數組中。只是隨機化數組,然後使用遞增索引而不是隨機*長度來表示'num'。一旦你達到從0開始的結尾 – pawel

回答

0

你可以使用的每張圖片的計數器(與對象),並決定是否計數器低於一定值時,像3如果不,然後獲得另一個隨機值。

對於刪除(或隱藏)的圖像,遞減計數器。

0

總有15可見光圖像,但陣列是做出來的28

網格初始化的:

  1. 設立了28個圖像
  2. 副本的陣列的原始數組和致電presentImages
  3. 從中隨機選擇13張圖像,將其刪除,並建立被稱爲13圖像陣列absentImages
  4. 你現在有3陣列 - 原(你將不會被使用),presentImagesabsentImages
  5. presentImages
  6. 填充與圖像電網館

當它的時間來改變圖像:

  1. 刪除次從電網Ë圖像和absentImages[0]
  2. 移動absentImages[0]absentImages陣列presentImages陣列
  3. 移動最近從網格中刪除從presentImagesabsentImages,使其成爲absentImages陣列
  4. 在新的最後圖像的圖像替換
0

下面是示例代碼從現有圖像陣列獨特的和隨機的15個項目:

var mainImages = [], random; // 28 or more items 
//at first : max = 15, count = 0 , indexes = [] 
getUniqueRandomIndexs(max, count, indexs){ 
    // return images after generating unique items 
    if(indexs.length == max) return indexes; 
    // dont use which is already used : mainImages.length-count 
    random = math.random(0,mainImages.length-1-count); 
    indexs.push(mainImages[random]); 
    count++; 
    // swap pushed image to last of the mainImages array, so that next time wont be using it. 
    mainImages[random] = mainImages[mainImages.length-1-count]; 
    mainImages[mainImages.length-1-count]; = indexs[indexs.length-1]; 
    retunr getUniqueRandomIndexs(max, count, indexs); 
} 

每3秒鐘此功能將返回唯一圖像數組。

它似乎是一樣的,從CD堆撿unique & random電影光盤,看其保持在last of stack,使我們可以輕鬆地跳過下一時間,而撿了一個新的隨機獨特的後電影光盤。