随机给定属性,如图库网格中唯一的img,srcs

时间:2016-11-28 09:16:32

标签: javascript jquery

我为网格库创建了这个脚本,每3秒随机更改一次图像,通过更改其srcset属性,总共有15个可见图像,但是数组是由28个进行的,因为它的随机有时会发生3或者更多相同的图像,有机会让所有15个相同(疯狂的小机会,但你得到我的观点),我想以某种方式阻止它。

我正在考虑以某种方式定义最多可能存在2个相同的属性,因此如果有2个属性,它不会将其他img更改为该属性。或者如果可能的话,这将是完美的,只有一个属性可见,如果确实存在该属性,它就不会将其添加到其他img。

我最多可以拥有2个相同的属性,因为它可以最大限度地减少同时看到它们的机会,因为一半是隐藏的,它会阻止seeig 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);

});

感谢您的想法

3 个答案:

答案 0 :(得分:0)

您可以为每个图像使用计数器(使用对象)并确定计数器是否低于某个值,如3,如果不是,则获取另一个随机值。

对于已删除(或隐藏)的图像,递减计数器。

答案 1 :(得分:0)

  

总共有15个可见图像,但阵列是由28个

组成的

网格初始化:

  1. 设置28张图片的原始数组
  2. 复制数组并调用副本presentImages
  3. presentImages中随机选择13张图片,删除它们并构建一个名为absentImages
  4. 的13图像数组
  5. 您现在拥有 3个数组 - 原作(您将不会使用),presentImagesabsentImages
  6. 使用presentImages
  7. 中的图片填充网格库

    何时需要更改图片:

    1. 从网格中删除图片并将其替换为absentImages[0]
    2. absentImages[0]absentImages数组移至presentImages数组
    3. 将最近从网格中删除的图像从presentImages移至absentImages,以使其成为absentImages数组中新的最后一个图像

答案 2 :(得分: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 电影cd一样,观看之后请将其保留在 last of stack 这样我们就可以在拿起新的随机独特电影CD时轻松跳过。