繁体   English   中英

如何在JavaScript中创建多个实例

[英]how to make multiple instances in JavaScript

我试图生成随机数以从数组中选择随机项以更新图片拼贴,我注意到有时生成的数与先前生成的数相同,导致一张图片更新2-3次,因此检查一下我认为是如果我将上次生成的随机数存储到变量中,并执行一个检查上一次生成的值是否等于当前生成的值的函数,那就很好了,它会继续生成数字,直到生成非相等值。

在我想要多个实例之前,它工作正常……作为存储最后一个值的变量是相同的,我得到相同的数字。

var bgs = document.getElementById('collage').getElementsByClassName('bg');
var images = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

var lv = null;
function get_random(length) {
    arr = [];
    while (arr.length < 1) {
        var cv = Math.floor(Math.random() * length);
        if (lv === cv) {
            arr = [];
            continue;
        }
        else if (lv !== cv) {
            arr.push(cv);
            break;
        }
    }
    lv = arr[0];
    return arr[0];
}

function update_collage() {
    var img = images[get_random(images.length)];
    var target = bgs[get_random(bgs.length)];
    target.style.background = "url('assets/img/thumbs/" + img + ".jpg') no-repeat center";
    target.style.backgroundSize = "cover";
}
window.setInterval(function(){
    update_collage();
}, 1200);

我该如何纠正,如何创建函数或变量的多个实例

我建议您使用生成器函数并根据需要实例化它:

 // Generate pairwise unique random numbers < max: function* generate_random(max) { let prev; while (true) { let next = Math.floor(Math.random() * max); if (prev === next) continue; yield prev = next; } } // Example: let generators = [generate_random(3), generate_random(3)]; for (let i = 0; i < 10; ++i) { // Both generators run independently: console.log(generators[0].next().value, generators[1].next().value); } 

在您的代码中,您可以例如替换

var img = images[get_random(images.length)];
var target = bgs[get_random(bgs.length)];

var img = images[generators[0].next().value];
var target = bgs[generators[1].next().value];

哪里

var generators = [generate_random(images.length), generate_random(bgs.length)];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM