2017-03-14 89 views
0

我試圖寫一個功能,按順序淡出X元素,一旦完成運行另一個功能。功能在同一時間觸發

function fadeOut(pro){ 
     $('.interactive ul li').each(function(i) { 
      $(this).find('a').delay(200*(i+1)).fadeOut(200,function(){ 
       $('.opening-title').delay(500).fadeOut(); 
      }); 
      showTimeline(pro); 
     });   
    } 

    function showTimeline(pro){ 
     $('.timeline-container').addClass('in-view'); 
     console.log(pro); 
    } 

由於某些原因'showTimeline()'在同一時間運行,我不明白爲什麼?


全部JS

$(document).ready(function() { 

    'use strict'; 

    function init() { 

     function showPath(pro) { 
      fadeOut(pro); 

     } 

     function fadeOut(pro) { 
      $('.ul li').each(function(i) { 
       $(this).find('a').delay(1200 * (i + 1)).fadeOut(200, function() { 
        $('.title').delay(500).fadeOut(); 
       }); 
      }); 
      showTimeline(pro); 
     } 

     function showTimeline(pro) { 
      $('.container').addClass('in-view'); 
      console.log(pro); 
     } 

     $('.path').on('click', function() { 
      showPath($(this).attr('data-pro')); 
     }); 


    } //end init 

    init(); 

}); //end doc ready 
+1

,因爲你是在一個循環中 – epascarello

+0

調用它的延遲可能使用的setTimeout與200毫秒推遲淡出。這也會導致showTimeline(pro)首先運行,因爲延遲會將淡入淡出函數放入堆棧末尾。 – Shilly

+0

showTimeline在每個循環中 – YounesM

回答

0

您需要等到所有元素都褪色。 Working Example

但是,基本上只是增加一個計數器,知道什麼時候所有的元素都消失:

var hiddenElements = 0; 
function fadeOut(pro){ 
     $('.interactive ul li').each(function(i) { 
      $(this).find('a').delay(200*(i+1)).fadeOut(200,function(){ 
       $('.opening-title').delay(500).fadeOut(); 
       hiddenElements++; 
       if (hiddenElements === $('.interactive ul li').length){ 
        showTimeline(pro);   
       } 
      });    
     });  

    } 
1

要調用在一個循環showTimeline功能。這樣調用它,而不是...

function fadeOut(pro) { 
    $('.interactive ul li').each(function(i) { 
     $(this).find('a').delay(200 * (i + 1)).fadeOut(200, function() { 
      $('.opening-title').delay(500).fadeOut(); 
     }); 
    }); 
    showTimeline(pro); 
} 

function showTimeline(pro) { 
    $('.timeline-container').addClass('in-view'); 
    console.log(pro); 
} 
+0

我試過這個@Siam,但它仍然不起作用... – Liam

0

您可以使用jQuery when

希望這個片段將

var fadeOut=function(pro){ 
     $('.interactive ul li').each(function(i) { 
      $(this).find('a').delay(200*(i+1)).fadeOut(200,function(){ 
       $('.opening-title').delay(500).fadeOut(); 
      }); 
      showTimeline(pro); 
     });   
    } 

var showTimeline=function(pro){ 
     $('.timeline-container').addClass('in-view'); 
     console.log(pro); 
    } 
$.when(fadeOut()).then(showTimeline()); 

我不能完全測試有用的,但你可以試試這個

$(document).ready(function() { 

    'use strict'; 

    $('.path').on('click', function() { 
    $.when(fadeOut($(this).attr('data-pro'))).then(showTimeline($(this).attr('data-pro'))); 

    }); 

    function fadeOut(pro) { 
    $('.ul li').each(function(i) { 
     $(this).find('a').delay(1200 * (i + 1)).fadeOut(200, function() { 
     $('.title').delay(500).fadeOut(); 
     }); 
    }); 
    } 

    function showTimeline(pro) { 
    $('.container').addClass('in-view'); 
    console.log(pro); 
    } 
}); 
+0

現在所有在頁面上運行的函數加載@Brk,我會發布我的完整的JS – Liam