这个问题一直困扰着我,我意识到真正的问题是你想要一种洗牌的方式。如果您有办法做到这一点,那么您的原始功能甚至可以按预期工作。事实证明,改组 jQuery 元素列表并不像您想象的那么容易。我首先实现了一个允许您交换两个任意 jQuery 元素的函数(这避免了使用jQuery.clone
,它有副作用,例如删除事件侦听器):
function swap($a, $b){
var $aNext = $a.next(),
$aParent = $a.parent();
$a.insertAfter($b);
if($aNext.length) $b.insertBefore($aNext);
else $aParent.append($b);
}
然后你可以实现一个Fisher-Yates shuffle:
function shuffle($items){
var i, j;
for(i=$items.length-1; i>1; i--){
j = Math.floor(Math.random() * (i+1));
swap($items.eq(i), $items.eq(j));
}
}
现在你可以简单地洗牌你所有的推荐:
shuffle($('.testimonials .item'));
然后使用您的原始代码:
$('.testimonials div:first').show();
setInterval(function(){
$('.testimonials div:first-child')
.fadeOut(1000)
.next('div')
.delay(1000)
.fadeIn(1000)
.end()
.appendTo('.testimonials')
},3000);
当然,一旦你完成了所有的推荐,你可能想要重新洗牌,不要一遍又一遍地重复相同的顺序。
演示:http: //jsfiddle.net/JWGbz/7/