javascript - 将随机类应用于多组元素,不重复

标签 javascript jquery arrays loops random

我有多个 div 组,我需要应用一个随机类,并且在每个组中都没有重复。完成此操作后,我需要将数组“重置”回原始值,然后移动到下一组 div,我再次将随机类应用于每个 div。

这个想法是为了得到看起来像这样的东西:

<div class="mini-thumbnail-container">
    <div class="mini-thumbnail-individual-image left">
    <div class="mini-thumbnail-individual-image centre">
    <div class="mini-thumbnail-individual-image right">
</div>

<div class="mini-thumbnail-container">
    <div class="mini-thumbnail-individual-image centre">
    <div class="mini-thumbnail-individual-image right">
    <div class="mini-thumbnail-individual-image left">
</div>

<div class="mini-thumbnail-container">
    <div class="mini-thumbnail-individual-image right">
    <div class="mini-thumbnail-individual-image left">
    <div class="mini-thumbnail-individual-image centre">
</div>

等等

我无耻地从另一个 stackoverflow 问题中获取代码来处理这个问题,但我不知道如何让它处理我的所有元素,而不是前三个。

这是 jQuery:

function shuffle(obj) {
    var l = obj.length,
        i = 0,
        rnd,
        tmp;

    while (i < l) {
        rnd = Math.floor(Math.random() * i);
        tmp = obj[i];
        obj[i] = obj[rnd];
        obj[rnd] = tmp;
        i += 1;
    }
}

var classes = ["centre", "left", "right"];
shuffle(classes);

jQuery(".mini-thumbnail-individual-image").each(function() {
    jQuery(this).addClass(classes.pop());
});

这里是我的 div 结构的基本轮廓——我有多个这样的结构,我想对其进行迭代并将随机类应用于每个 <div class="mini-thumbnail-individual-image">

HTML:

<div class="col-1-6">
    <div class="mini-thumbnail-container">
        <div class="mini-thumbnail-individual-image">
            <img class="mini-thumbnail-image" src="" />
        </div>
        <div class="mini-thumbnail-individual-image">
            <img class="mini-thumbnail-image" src="" />
        </div>
        <div class="mini-thumbnail-individual-image">
            <img class="mini-thumbnail-image" src="" />
        </div>
    </div>
</div>

我想我需要创建一个循环,看起来在每次迭代数组后触发,一旦它发现数组为空,我需要将类名推回,然后循环下一组 div , 直到每组 div 都应用了一个随机类,但也许有一种我还没有想到的更简单的方法。

提前致谢!

最佳答案

你走在正确的轨道上。

在不谈优化代码的方法的情况下,这里有(一种)方法可以快速到达您需要的地方:

function shuffle(obj) {
    var l = obj.length,
        i = 0,
        rnd,
        tmp;

    while (i < l) {
        rnd = Math.floor(Math.random() * i);
        tmp = obj[i];
        obj[i] = obj[rnd];
        obj[rnd] = tmp;
        i += 1;
    }
}

// declare OUTSIDE the function for correct scope
var classes;

// Simple function to set up the classes variable and shuffle.
function setUpClasses() {
    classes = ["centre", "left", "right"];
    shuffle(classes);
}

jQuery(".mini-thumbnail-individual-image").each(function() {
    // Check if classes is set / empty.  If so, set up the classes again.
    if (!classes  || classes.length < 1) {
        setUpClasses();
    }
    jQuery(this).addClass(classes.pop());
});

如果您想了解更简洁/更简洁的方法来打乱数组,this article还有一些其他的技术。这是其中之一:

yourArray.sort(function() { return 0.5 - Math.random() });

所以你可以从字面上删除你的洗牌功能,然后这样做:

function setUpClasses() {
    classes = ["centre", "left", "right"];
    classes.sort(function() { return 0.5 - Math.random() });
}

或者,如果您想要最大程度的简洁:

function setUpClasses() {
    classes = ["centre", "left", "right"].sort(function() { return 0.5 - Math.random() });
}

Here is a working Fiddle

关于javascript - 将随机类应用于多组元素,不重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39085321/

相关文章:

javascript - 在函数内使用 "this"关键字访问全局属性

javascript - Highchart 数据不以 0 开头会出现错误

arrays - 使用 Powershell "where"命令与值数组进行比较

arrays - 将静态数组转换为不同元素类型的开放数组

javascript - ng-model 显示重复值

javascript - 如何选取类的span标签中的内容

javascript - jQuery/Ajax - 尝试通过 Ajax 创建 POST 方法并获取对 HTML 的响应

Javascript 仅在刷新页面后才起作用

javascript - jQuery UI 可拖动 : Stack on Click

javascript - Highcharts 如何使用 JavaScript 变量作为系列数据源?