2012-03-15 433 views
1
setInterval(this.Animate(), this.speed); 

這是預計每運行一次這個速度。是的,但瀏覽器只運行一次。這有什麼可能的原因?Javascript setInterval只運行一次

+0

我們如何定義'this' – 2012-03-15 17:27:57

+0

指向同一類的指針...... – 2012-03-15 18:31:43

回答

6

如果Animate是派生功能從原型,你將不得不使用:

setInterval(this.Animate.bind(this), this.speed); 
+1

+1很有可能當前這個'this'需要保留爲調用上下文。 – 2012-03-15 17:31:48

5

執行以下操作:

setInterval(this.Animate, this.speed); 

您正在執行的函數,而不是分配給在一定的時間間隔要執行的函數的引用...

3

讓我們看看你的代碼

setInterval(this.Animate(), this.speed); 

什麼跟它運行功能this.Animate()馬上和存儲返回什麼都被調用。

你想要做的是創建一個封閉

var that = this; 
setInterval(function(){ that.Animate() }, this.speed); 

that保持當前的範圍。

5

嘗試用括號運行功能,當你把括號它總是調用,而不是通過它的功能,這是你想要的這裏:

setInterval(this.Animate, this.speed); 

如果還是不行,你要調試,並找出哪些是「本」的範圍,因爲「這」可能會改變。您可以通過在瀏覽器的JS調試器添加斷點做到這一點。 此外,你可以試試這個,以避免與「應用」

var animate = this.animate.apply(this) 
setInterval(animate, this.speed); 

P.S範圍的​​問題:這可能是一個不錯的選擇,以避免setInterval的動畫,因爲他們可能在一次排隊,然後起火。相反,在函數(this.Animate)的末尾調用setTimedout一次又一次爲使創建一個循環。

1

如果你正在尋找一個jQuery刷新腳本,嘗試:

refreshId = setInterval(function() { 
    // Events or Actions 
}, 5000); 

如果你想暫停或停止這種情況,使用明確的時間間隔:clearInterval(refreshId);