这来自 James Padolsey。查看 他的文章 以了解纯 JavaScript 技术。
插件
(function($){
$.fn.shuffle = function() {
var allElems = this.get(),
getRandom = function(max) {
return Math.floor(Math.random() * max);
},
shuffled = $.map(allElems, function(){
var random = getRandom(allElems.length),
randEl = $(allElems[random]).clone(true)[0];
allElems.splice(random, 1);
return randEl;
});
this.each(function(i){
$(this).replaceWith($(shuffled[i]));
});
return $(shuffled);
};
})(jQuery);
使用
目标元素,调用 shuffle。
$('ul#list li').shuffle();
感谢您发布这篇文章 - 它很有用。我将再次阅读有关 map、get 和 replaceWith 的 jQuery 文档,以及有关原生 js splice 的文档。
您的网页设计太棒了。我爱它。恭喜!
Alex
很棒的文章。谢谢。
很棒的插件。非常感谢。
有人知道如何在同一页面上随机化两个不同的列表时使它起作用吗?是的,我可以为每个列表分配一个不同的 ID,然后像这样随机排列它们
$(‘ul#list1 li’).shuffle();
$(‘ul#list2 li’).shuffle();
但我想要做的是
$(‘ul.randlist li’).shuffle();
然后它将仅随机排列该 UL 中的列表项,即使我在页面上有多个列表。现在它的作用是随机排列所有具有该类的所有ul中的所有列表项。这不是我想要的,因为列表项需要与它们的父项保持一致。
Trevor,使用
each()
很简单$('ul.randlist').each(function(){
$(this).find('li').shuffle()
})
此外,我注意到这个插件会破坏对原始元素的引用(因为它实际上复制了它们)。我写了一个版本,它实际上会随机排列原始元素。
“`
(function($){
})(jQuery)
“`
极好的提示!我只会补充一点,如果您在父 ul#list 中嵌套了列表项 (ul ul li),为了只随机排列父列表项,请使用此代码进行初始化
感谢 Jesse!哇,这是一个简单的修复,我显然需要更好地学习 jQuery。您的更新的 shuffle 函数很棒!
我只是想知道您对函数“将破坏对原始元素的引用”的具体含义?
许可证?
所以也许这个适用 https://css-tricks.org.cn/license/ … 我现在要被提拔了:D
所需的最小项目数是多少?
不错的解决方案:)
我做了一些小的改动,做了一个插件来随机删除一些项目
(function($) {
$.fn.randomRemove = function(n) {
var allElems = this.get(),
getRandom = function(max) {
return Math.floor(Math.random() * max);
};
if (allElems.length > n) {
while (n > 0) {
var random = getRandom(allElems.length);
$(allElems[random]).remove();
allElems.splice(random, 1);
n–;
}
}
return $(allElems);
};
})(jQuery);
或者试试这个
不错 ^
@jess 的不错。真的很有效,其他选项破坏了引用,从而破坏了我的应用程序!
再次感谢!
谢谢!帮了我大忙!
效果像宝石一样。谢谢!
哇,这真是一个很棒的脚本,感谢分享!
有没有办法只在 n 个帖子之后应用随机排列?
再次感谢
@Giovanni:我认为
if (posts > n) {
$(‘#elements’).shuffle();
}
是否可以将它们全部动画化?
有人知道这个的 ES6/Typescript 非 jQuery 版本吗?当我尝试将“原生 js”版本插入我的 Angular 应用程序时,它会抛出错误,语法完全错误。
您好,我想问一下,如果我们想在这个函数中添加一些 setInterval,如何才能每次循环它,谢谢
有纯 JavaScript 版本吗?
没关系,我已经做了这个,希望它能帮助您
https://gist.github.com/marcomarkkez/53331159aab7521e66df3f5efbae3208