2011-04-14 69 views
0

我需要淡入幾個列表元素,然後淡出所有元素並重新開始。我有我在這裏找到的代碼:http://jsfiddle.net/mqthK/,這裏指出:Jquery: Fade multiple elements one after the other。 Howevever,我需要遞歸地運行這個代碼(即 - 淡出所有元素,然後再次調用函數並重新開始)。逐個淡入元素,然後全部淡出並重新開始

請問有人可以爲此分享正確的代碼嗎?

謝謝!

+0

也許這只是你的大腦被打斷了,但只是爲了確定:你不想遞歸地去做。迭代是你將要使用的東西,對吧? – 2011-04-14 16:30:05

+0

'腦呃'聽起來是正確的......這是一個12小時的工作日,我還沒有看到它的結尾...... – Ran 2011-04-14 16:49:44

回答

1

如果更新到1.4.4的jQuery或更高版本,可以使用fadeToggle方法。

如果選擇全部要淡出的元素,並在接下來的元素的索引發送到顯示/隱藏,你可以很容易地循環,並重新啓動:

http://jsfiddle.net/mqthK/48/

function fadeLI(elem, idx) { 
    elem.eq(idx).fadeToggle(500, function() { 
     fadeLI(elem, (idx + 1) % elem.length); 
    }); 
} 

fadeLI($("#list li"), 0); 
0

檢查是否有下一個元素;如果沒有,你就在列表的最後;然後淡出所有內容並使用第一個元素運行。

+0

是的,我理解邏輯,但我需要一些幫助正確的代碼(嘗試在這裏小心遞歸函數)。 – Ran 2011-04-14 16:30:53

0

更改fadeLI到如下:

工作例如:http://jsfiddle.net/mqthK/45/

function fadeLI(elem, show) { 
     if(elem.length == 0){ 
      fadeLI($("#list li:first")); 
     } 
     if(elem.is(":visible")){ 
     elem.fadeOut(500, function() { 
        fadeLI($(this).next()); 
      }); 
     } 
     else{ 
      elem.fadeIn(500, function() { 
        fadeLI($(this).next()); 
      }); 
     } 
} 
+0

謝謝。這看起來像我所需要的。但是,在您的工作示例中,第一個列表元素在元素淡出時保持閃爍。這是爲什麼? – Ran 2011-04-14 16:35:06

+0

這是因爲您隱藏了元素,因此指定了display的style屬性:none,因此當前元素下方的元素會在視口中碰撞。如果你想避免閃爍,那麼你必須切換可見性屬性。 – Chandu 2011-04-14 16:39:59