示例: 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 秒的延迟。
当超时中的代码运行时,它会在当前值为i 的语句上执行fadeOut()(docs) 方法。
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);
编辑:代码可以通过使用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);