我为电网画廊制作了此脚本,该脚本在每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
制成
网格初始化:
- 设置28张图像的原始数组
- 复制数组并调用复制
presentImages
- 从
presentImages
随机选择13张图像,删除它们并构建一个名为absentImages
的13个图像数组 - 您现在拥有 3数组 - 原始(您将不使用),
presentImages
和absentImages
- 用
presentImages
的图像填充网格画廊
是时候该更改图像了:
- 从网格中删除图像,然后用
absentImages[0]
替换它 - 将
absentImages[0]
从absentImages
阵列移动到presentImages
数组 - 将图像从
presentImages
移动到absentImages
,以使其成为absentImages
数组中的新的最后一个图像