2014-09-04 158 views
0

我在這兩個大if´s之外有一個for循環。我的問題似乎是,第二個功能似乎在短暫的延遲中開始。應該先完成功能,然後再運行?第二個函數在第一個完成之前啓動,Javascript

無法解決問題,爲什麼第二次啓動之前爲什麼第一次完成。當第二個功能火災藏漢它將從零一部開拓創新的數量增加至60

if(activeSlideBoolean && activeSlide < i){ 
    step = 0; 
    div[activeSlide].className = 'slide left'; 

    animateHalfLeft(activeSlide); 

    function animateHalfLeft(activeSlide){ 
     if(step < -60){ 
      return; 
     } 

     div[activeSlide].style.left = step+'em'; 
     step -= 6; 


     setTimeout (function(){ animateHalfLeft(activeSlide);},100); 


    } 

    activeSlideBoolean = false; 

} 
if((activeSlideBoolean === false) && (RestOfSlides)){ 
    step = 60; 
    animateTotalLeft(RestOfSlides); 

    function animateTotalLeft(RestOfSlides){ 
     f(step < -60){ 
      return; 
     } 

     div[RestOfSlides].style.left = step+'em'; 
     step -= 6; 
     setTimeout (function(){ animateTotalLeft(RestOfSlides);},100); 

    } 

} 
+3

你爲什麼要在一個條件內聲明你的函數? 「f(step <-60)'meaan是什麼? – 2014-09-04 15:14:49

+0

我有條件以外的動態變量,我不知道如何讓它們在主函數之外的函數(div [1],div [2])等 – Nicco 2014-09-04 15:16:10

+0

「動態變量」?他們不是總是動態的嗎?你可能應該讀一些關於參數和聲明函數 – 2014-09-04 15:16:53

回答

2

你的功能animateHalfLeft和animateTotalLeft正是除了一件事的說法activeSlide和RestOfSlides相同。

我建議首先創建一個單獨的功能:

function animateToLeft(whatToSlide){ 
     if(step < -60){ 
      return; 
     } 

     div[whatToSlide].style.left = step+'em'; 
     step -= 6; 
     setTimeout (function(){ animateToLeft(whatToSlide);},100); 

    } 
} 

但功能之前的setTimeout結束還在整理(或甚至開始)。

Javascript是一種功能性語言。使用方法:

function animateToLeft(whatToSlide, step, callback){ 
     if(step < -60){ 
      if (typeof callback === 'function') { 
       callback(); 
      } 
      return; 
     } 

     div[whatToSlide].style.left = step+'em'; 
     step -= 6; 
     setTimeout (function(){ 
      animateToLeft(whatToSlide , step, callback); 
     },100); 
    } 
} 

if(activeSlideBoolean && activeSlide < i){ 
    var isStarted = false; 
    animateToLeft(activeSlide, 0, function() { 
     if (isStarted) { 
      return; 
     } 
     isStarted = true; 

     if (RestOfSlides) { 
      animateToLeft(RestOfSlides, 60, null); 
      // Finishing order 3 
     } 
    }); 
    // Finishing order 1 
} 

if(activeSlideBoolean === false && RestOfSlides){ 
    animateToLeft(RestOfSlides, 60, null); 
    // finishing order 2 
} 

我不知道它是否適合你(不要複製/粘貼idiotly),但對我來說,這是一個良好的開端。

相關問題