制作像IMG这样的随机给定属性,在画廊网格中独特的srcs



我为电网画廊制作了此脚本,该脚本在每3s时随机更改图像,通过更改其srcset属性,总有15个可见图像,但数组是由28制成的,并且由于其有时会发生随机的情况,有3个或更多的图像,有可能让所有15个相同(疯狂的机会,但您明白了),我想以某种方式预防它。

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

我可以最多拥有相同属性的最多2

Heres 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,如果没有,请获取另一个随机值。

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

以下是示例代码,可从现有图像数组中获取唯一的随机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。

总是有15张可见图像,但数组由28

制成

网格初始化:

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

是时候该更改图像了:

  1. 从网格中删除图像,然后用absentImages[0]
  2. 替换它
  3. absentImages[0]absentImages阵列移动到presentImages数组
  4. 将图像从presentImages移动到absentImages,以使其成为absentImages数组中的新的最后一个图像

最新更新