2014-07-15 42 views
-2

我有這個調用動畫函數的slideUp函數。我們的目標是通過每20ms調用一次動畫函數,在屏幕上向上滑動div,然後在調整div位置的css後在瀏覽器中重新渲染div。 我正在使用Node js,並且由於異步行爲,我認爲超時只會引起一次參與,並且程序會在等待超時完成時繼續運行。 當我將「底部」的值打印到控制檯時,它按預期循環了20次。只有最後的看法 得到渲染。任何人都可以提供任何方式來解決這個問題,以便它可以重現20次中的每一次?setTimeout在NodeJS中不起作用

slideUp: function() { 
      var bottom=0; 
      this.animate(bottom); 
     }, 

animate: function(bottom){ 
       bottom++; 
       if (bottom<20){ 
        this.view.getClientNotificationElement().setAttribute("style","margin-bottom:"+bottom+"px"); 
        this.clientNotification.attachTo(this.view.getClientNotificationElement()); 
        setTimeout(this.animate(bottom), 20); 
        console.log(bottom); 
       } 
      }  
+2

哼...你使用Node js客戶端嗎? –

+0

這是一些值得關注的瀏覽器。 Node.js在服務器端運行。 – AdityaParab

+0

你都錯了。如果使用[node-webkit](https://github.com/rogerwang/node-webkit)或類似的框架,則可以在瀏覽器環境中輕鬆地運行node.js。 – MMM

回答

1

你傳入返回值的this.animate(bottom)setTimeout

animate函數沒有return語句,所以它返回undefined

該函數的影響立即發生(因爲你調用它),然後setTimeout什麼都不做。

改爲將函數傳遞給setTimeout

var self = this; 
var callback = function() { 
    self.animate(bottom); 
}; 
setTimeout(callback, 20);