2013-07-19 87 views
0

我創建了一個帶有Jquery FadeIn動畫的菜單,我想在鼠標懸停時打開菜單,但我也希望淡化之前的選項卡內容。 這應該是這樣的:在for循環中延遲fadeIn()

我的鼠標是第三個選項卡,第一個選項卡popin,然後是第二個,然後是第三個,每個動畫之間有一點延遲。

我試圖用jQuery做到這一點:

$('.navigation li').hover(
    // When mouse enters the .navigation element 

     function() { 
     var tab = $(this).attr('id'); 
     var numTab = tab.substring(2); 
     //Fade in the navigation submenu 
     for (var i = 0; i <= numTab ; i++) { 
      var domElt = '#Et' + i + ' ul'; 
      $(domElt).fadeIn(300); // fadeIn will show the sub cat menu 
      console.log(domElt); 
     } 
     }, 
     // When mouse leaves the .navigation element 
     function() { 
     var tab = $(this).attr('id'); 
     var numTab = tab.substring(2); 
     //Fade out the navigation submenu 
     for (var i = 0; i <= numTab ; i++) { 
      var domElt = '#Et' + i + ' ul'; 
      $(domElt).fadeOut(); // fadeIn will show the sub cat menu 
     } 
     } 
    ); 

當你在它the live version看,它真的不工作,所有的標籤一起淡入,或好像。我如何添加延遲來獲得「一個接一個的淡入淡出效果」?

回答

1

你可以鏈變淡:

function() { 
    var tab = this.id; 
    var numTab = +(tab.substring(2)); 
    //Fade in the navigation submenu 
    var i = 0; 
    function doFade() { 
     if (i === numTab) return; 

     // In the fiddle provided, the element id values 
     // start at 1, not zero 

     var domElt = '#Et' + (i + 1) + ' ul'; 
     i = i + 1; 
     $(domElt).fadeIn(300, doFade); 
    } 
    doFade(); 
    }, 

(同樣地,對於淡出)

+0

如果您將'numTab'轉換爲數字類型'(var numTab = + tab.substring(2)+ 1;)',並將'i'的值從0更改爲1,那麼可能會更好。根據OP jsFiddle。如果你使用命名函數表達式'(function doFade(){...}());' – Givi

+0

@Givi我同意鑄造「numTab」(我已經更新了答案),但是在我看來,原始問題中的代碼標籤索引從零開始。 *編輯*哦,我看,小提琴是不同的。嘆。 – Pointy

+0

是的你是對的,但元素的ID從1開始:) – Givi