Пример:http://jsfiddle.net/YSPe7/
var statements = $('#statements > ul > li').slice(1).hide().end();
var i = 0;
function rotate() {
setTimeout(function() {
statements.eq(i).fadeOut(800, function() {
i = ++i % statements.length;
statements.eq(i).fadeIn(800, rotate);
});
}, 4000);
}
rotate();
В принципе, мы прячемся все, кроме первого утверждения, то ссылки на весь комплект.
Затем мы вызываем функцию rotate()
. Внутри функции есть setTimeout()
, чтобы вызвать 4-секундную задержку.
Когда код в тайм-ауте выполняется, он выполняет метод fadeOut()
(docs) для оператора с текущим значением i
.
fadeOut()
имеет обратный вызов, который увеличивает i
(или устанавливает его обратно на 0) и выполняет метод fadeIn()
(docs) для этого нового элемента.
.fadeIn()
также имеет обратный вызов, который является тем же самым rotate()
функцией, которая начинает весь процесс.
Если вы не хотите загрязнять пространство имен с i
, передать его в качестве аргумента rotate()
как это:
Пример:http://jsfiddle.net/YSPe7/1/
var statements = $('#statements > ul > li').slice(1).hide().end();
function rotate(i) {
setTimeout(function() {
statements.eq(i).fadeOut(800, function() {
i = ++i % statements.length;
statements.eq(i).fadeIn(800, function() {
rotate(i);
});
});
}, 4000);
}
rotate(0);
EDIT: Код может быть немного уменьшен с помощью delay()
(docs) вместо setTimeout
.
Пример:http://jsfiddle.net/YSPe7/2/
var statements = $('#statements > ul > li').slice(1).hide().end();
function rotate(i) {
statements.eq(i).delay(4000).fadeOut(800, function() {
i = ++i % statements.length;
statements.eq(i).fadeIn(800, function() {
rotate(i);
});
});
}
rotate(0);
@patrick dw +1 Большое спасибо. Не звучать полностью плотно, но что, если моя разметка выглядит так: http://jsfiddle.net/SmJMP/, где у меня есть 2 divs в каждом выражении div. – zmol
@zmol: Это будет намного проще, если вы можете обернуть пары в div. Это возможность? – user113716
@zmol: [Вот как это могло бы работать] (http://jsfiddle.net/SmJMP/1/), если они попарно. Это немного сложнее, потому что нам нужно предотвратить выполнение функций обратного вызова, поэтому каждый раз нужно удваивать количество вызовов 'fadeIn()' и 'rotate()'. Если вы можете обернуть пары, то это просто вопрос смены селектора. – user113716