Проверьте текущее значение индекса в обратном вызове завершения анимации и рекурсивно вызовите функцию.
(function() {
var quotes = $(".quotes");
var quoteIndex = -1;
function showNextQuote() {
quotes.eq(++quoteIndex)
.fadeIn(2000)
.delay(2000)
.fadeOut(2000,() => { if(quoteIndex < 5) showNextQuote(); });
}
showNextQuote();
})();
(function() {
var quotes = $(".quotes");
var quoteIndex = -1;
function showNextQuote() {
quotes.eq(++quoteIndex)
.fadeIn(2000)
.delay(2000)
.fadeOut(2000, () => {
if (quoteIndex < 5) showNextQuote();
});
}
showNextQuote();
})();
.quotes {
display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="container">
<h2 class="quotes">first quote</h2>
<h2 class="quotes">second quote</h2>
<h2 class="quotes">3rd quote</h2>
<h2 class="quotes">4th quote</h2>
<h2 class="quotes">5th quote</h2>
<h2 class="quotes">6th quote</h2>
</div>
Если вы хотите, чтобы последний элемент отображался в конце, предоставьте обратный вызов после метода задержки, используя queue()
метод.
(function () {
var quotes = $(".quotes");
var quoteIndex = -1;
function showNextQuote() {
quotes
.eq(++quoteIndex)
.fadeIn(2000)
.delay(2000)
.queue(function (next) {
if (quoteIndex < 5) next();
})
.fadeOut(2000, showNextQuote);
}
showNextQuote();
})();
(function() {
var quotes = $(".quotes");
var quoteIndex = -1;
function showNextQuote() {
quotes
.eq(++quoteIndex)
.fadeIn(2000)
.delay(2000)
.queue(function(next) {
if (quoteIndex < 5) next();
})
.fadeOut(2000, showNextQuote);
}
showNextQuote();
})();
.quotes {
display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="container">
<h2 class="quotes">first quote</h2>
<h2 class="quotes">second quote</h2>
<h2 class="quotes">3rd quote</h2>
<h2 class="quotes">4th quote</h2>
<h2 class="quotes">5th quote</h2>
<h2 class="quotes">6th quote</h2>
</div>