Эта проблема продолжала грызть меня, и я понял, что настоящая проблема заключается в том, что вам нужен способ перетасовать отзывы. Если бы у вас был способ сделать это, ваша исходная функция даже работала бы так, как предполагалось. Как оказалось, перетасовать список элементов 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);
}
Затем вы можете реализовать перетасовку Фишера-Йейтса:
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/
person
Ethan Brown
schedule
12.03.2014