0

jquery中是否有任何选项可以随机选择(3)具有相同类名的元素数量?

实际上我只想向上滑动3 个项目,这些项目应该是随机的

function e(e) {
    var t = $(window).scrollTop(),
        n = t + $(window).height(),
        r = $(e).offset().top,
        i = r + $(e).height() * .8;
    return i >= t && r <= n && i <= n && r >= t
}

function s() {
    if (e(t) && !i) {
        r.each(function (e) {
            $(this).delay(200 + e * 50).animate({
                top: "-110%"
            }, 500)
        }).each(function (e) {
            $(this).delay(200 + e * 100).animate({
                top: "0%"
            }, 500)
        });
        i = !0
    }
    i && $(window).unbind("scroll", s)
}
var n = $("#thumbs"),
    t = $(".thumbnails"),
    r = n.find(".thumb-info"),
    i = !1;
s();
$(window).bind("scroll", s);

演示http://jsfiddle.net/sweetmaanu/GgY3Z/

4

4 回答 4

0
var items = $('.thumbnails');
var random = shuffle(items).slice(0, 3);

解释:

  1. $('.thumbnails')选择所有具有类的元素thumbnails
  2. shuffle()从数组中返回 3 个随机元素(查看链接)
  3. .slice(0, 3)抓取洗牌数组的前 3 个值。

这是我为查看结果而制作的小提琴:Fiddle

于 2013-08-14T11:46:59.627 回答
0

使用洗牌算法,例如

function shuffleArray(a) { // Fisher-Yates shuffle, no side effects
    var i = a.length, t, j;
    a = a.slice();
    while (--i) t = a[i], a[i] = a[j = ~~(Math.random() * (i+1))], a[j] = t;
    return a;
}

洗牌你的元素数组

myArray = shuffleArray(myArray);

现在第一个3项目是随机的,所以用幻灯片循环它们。

var i;
for (i = 0; i < 3 && i < myArray.length; ++i) {
    // slide myArray[i]
}
于 2013-08-14T11:50:32.213 回答
0

这是纯js,可以满足您的需要

var fys=function(d,a,b,c){ //FisherYatesShuffle
 a=d.length;
 while(--a){
  b=Math.floor(Math.random()*(a-1));
  c=d[a];d[a]=d[b];d[b]=c;
 }
};
var el=document.getElementsByClassName('thumbnails'),l=el.length;
var n=[];while(l--){n[l]=l};
fys(n)

n 现在包含具有随机索引的数组,您使用

el[n[0]]调用第一个随机元素。

于 2013-08-14T11:51:28.310 回答
0

对于一个元素来说很简单:

var items = $('.item').length;
var currentItem = Math.floor(Math.random() * (items + 1));
$('.item').eq(currentItem).doSomething();

对于一些元素:

var number = 10;
for(i=0; i <= number; i++) {
    $('.item').eq(randomElement('.item')).doSomething();
}

function randomElement(el){
    var items = $(el).length;
    var currentItem = Math.floor(Math.random() * (items + 1));
    return currentItem;
}
于 2013-08-14T12:18:43.270 回答