我发现here有一个非常棒的,超级极小的见证旋转器,但我很好奇如何让它简单地随机化结果。这是现在起作用的旋转器:
$('.testimonials div:first').show();
setInterval(function(){
$('.testimonials div:first-child')
.fadeOut(1000)
.next('div')
.delay(1000)
.fadeIn(1000)
.end()
.appendTo('.testimonials')
},3000);
答案 0 :(得分:4)
此代码可确保相同的项目不会显示两次,并且如果您更改了推荐的数量,则会继续有效。显示的第一项也是随机的。
$(document).ready(function() {
$('.testimonials div').eq(Math.floor((Math.random() * $('.testimonials div').length))).show();
setInterval(function() {
var $items = $('.testimonials div');
if ($items.length < 2) {
return;
}
var $currentItem = $items.filter(':visible');
var currentIndex = $currentItem.index();
var nextIndex = currentIndex;
while (nextIndex == currentIndex) {
nextIndex = Math.floor((Math.random() * $items.length));
}
$currentItem.fadeOut(1000, function() {
$items.eq(nextIndex).fadeIn(1000);
});
}, 3000);
});
答案 1 :(得分:0)
试试这个:
var $items = $('.testimonials .item');
function getRandomItem(){
return $items.eq(Math.floor($items.length * Math.random()));
}
getRandomItem().show();
setInterval(function(){
var $outgoing = $items.filter(':visible');
var $incoming = getRandomItem();
$outgoing.fadeOut(1000, function(){
$incoming.fadeIn(1000);
});
}, 3000);
答案 2 :(得分:0)
这个问题一直困扰着我,我意识到真正的问题在于你想要一种方法来改变推荐。如果你有办法做到这一点,那么你的原始功能甚至可以按预期工作。事实证明,改组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);
当然,一旦你完成了所有的推荐,你可能需要重新洗牌,不要一遍又一遍地重复相同的顺序。