Вот еще один вариант решения этой проблемы, с использованием рекурсии и без использования изменяемых переменных. Кроме того, я не использую setInterval
, поэтому нет необходимости в очистке.
Имея этот HTML
<section id="testimonials">
<h2>My testimonial spinner</h2>
<div class="testimonial">
<p>First content</p>
</div>
<div class="testimonial">
<p>Second content</p>
</div>
<div class="testimonial">
<p>Third content</p>
</div>
</section>
Использование ES2016
Здесь вы вызываете функцию рекурсивно и обновляете аргументы.
const testimonials = $('#testimonials')
.children()
.filter('div.testimonial');
const showTestimonial = index => {
testimonials.hide();
$(testimonials[index]).fadeIn();
return index === testimonials.length
? showTestimonial(0)
: setTimeout(() => { showTestimonial(index + 1); }, 10000);
}
showTestimonial(0); // id of the first element you want to show.