В зависимости от того, какой визуальный эффект вы ищете (вопрос открыт для интерпретации) ...
Вы можете настроить два взаимно запускающих пользовательских события на содержащем div.
Чтобы получить время правильное, используйте эксплойт jQuery s .promise()
, который возвращает обещание, которое будет выполнено, когда текущая анимация (и) будет завершена.
Чтобы начать процесс, просто активируйте тот или иной пользовательский события.
$(document).ready(function() {
var $el = $('.intro');
var $words = $el.html($el.text().split(' ').map(word => `<span>${word} </span>`).join('')).children().hide();
$el.on('fadeIn', function() { // custom event
$.when(...$words.map(function(i, word) => $(word).delay(i * 1500).fadeIn(1700).promise()))
.then(function() {
$el.trigger('fadeOut'); // trigger fadeOut when fadeIn is complete
});
}).on('fadeOut', function() { // custom event
$.when(...$words.map(function(i, word) => $(word).delay(i * 1500).fadeOut(1700).promise()))
.then(function() {
$el.trigger('fadeIn'); // trigger fadeIn when fadeOut is complete
});
}).trigger('fadeIn'); // start a never ending fadeIn/fadeOut cycle.
});
непроверено
Процесс, несомненно, можно сделать более эффективным, в основном, работая с обещанием только из последнего слова, но код, вероятно, будет запутаться.