例: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)メソッドが実行されます。
には、i
をインクリメントする(または0に戻す)コールバックがあり、その新しい要素に対してfadeIn()
(docs)メソッドが実行されます。
.fadeIn()
には、同じプロセスであるrotate()
関数であるコールバックがあります。
あなたはこのようなrotate()
への引数として渡し、i
で名前空間を汚染したくない場合は、次の
例: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);
編集:を使用してコードを少し減らすことができます代わりに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/どこのdivに2つのdivがあるのでしょうか? – zmol
@zmol:divにペアをラップすることができればもっと簡単になります。それは可能でしょうか? – user113716
@zmol:[対処方法](http://jsfiddle.net/SmJMP/1/)がペアになっている場合。コールバック関数が2回実行されるのを防ぐ必要があるため、毎回 '' fadeIn() 'と' 'rotate()'を2倍にする必要があるので、少し複雑です。ペアをラップすることができれば、セレクタを変更するだけです。 – user113716