如何使用 jQuery 随机显示一组元素?

Posted

技术标签:

【中文标题】如何使用 jQuery 随机显示一组元素?【英文标题】:How can I randomly show a set of elements using jQuery? 【发布时间】:2010-09-19 03:09:03 【问题描述】:

使用 jQuery,您如何以随机顺序在页面上的每个 div.foo show(),每 X 毫秒出现一个新的?

澄清:我想从隐藏所有这些元素开始,并以所有这些元素显示结束,因此两次show() 同一个元素是没有意义的。

我原本以为我会创建一个列出所有元素的数组,随机选择一个,显示那个,使用 splice() 从数组中删除它,然后从剩余列表中随机选择下一个 - 等等。但是由于我的数组是 jQuery 对象的一部分,splice() 不可用。

【问题讨论】:

【参考方案1】:

一个有趣的方法是使用 shuffle 函数扩展 javascript 的 Array 基础对象。在 Prototype 中(在 JQuery 中应该相同,除了 jQuery.extend)。这是快速而肮脏的随机播放,还有很多其他方法可以做到这一点。

Object.extend(Array.prototype, 
  shuffle : function() 
    this.sort( function()  return 0.5 - Math.random();  );
    return this;
  
);

因此,假设您已经准备好您的 div 数组,请调用 shuffle() 方法并简单地按顺序(它们现在被打乱)并显示它们(根据您的间隔)。可能希望通过克隆 shuffle 方法返回的数组而不是直接对其进行排序来实现“非破坏性”。

【讨论】:

【参考方案2】:

我自己不使用 jQuery,但是这个呢:

var intervalMilliseconds = X; // set to your value for X
var divFoos = $("div.foo").get();
var intervalId = setInterval(function() 
   $(divFoos.splice(Math.floor(Math.random() * divFoos.length), 1)).show();
   if(divFoos.length == 0) clearInterval(intervalId);
, intervalMilliseconds);

这应该可以解决问题。


更新:由于您的描述并不明确,我假设您的意思是您最终想要显示所有这些,并且一旦它们可见,我们就完成了。如果不是,请进一步解释,以便我更新(如果您还不能从我提供的代码中确定您需要什么)。

【讨论】:

【参考方案3】:

我会这样做(未经测试)

(function () 
    var int, els;
    int = 100; // interval, in milliseconds
    els = $('div.foo');
    setInterval(function () 
        var idx;
        idx = Math.floor(els.length * Math.random());
        $(els[idx]).show();
        setTimeout(function () 
            $(els[idx]).hide();
        , int);
    , int);
)();

【讨论】:

这基本上是循环显示一个,然后在显示另一个之前隐藏它,永无止境,并可能在显示其他一些之前多次显示相同的一个(可以生成随机数: 0、1、1、0、2 等)。很难知道这是否是 OP 的意思。 它似乎满足了他们表达的要求。例如,将其更改为不连续显示两次相同的 div 将相当容易。

以上是关于如何使用 jQuery 随机显示一组元素?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用jQuery在页面上基于另一个随机元素编辑随机元素?

如何随机显示 4 个段落(一组 21 个)? [关闭]

Jquery UI - 从显示中获取一个元素:拖动时隐藏元素

如何使用 jQuery 检索单击元素的属性? [复制]

如何使用jquery从DOM中删除随机生成的属性?

如何使用jQuery在三个或更多条件下显示和隐藏元素?