setInterval(this.Animate(), this.speed);
這是預計每運行一次這個速度。是的,但瀏覽器只運行一次。這有什麼可能的原因?Javascript setInterval只運行一次
setInterval(this.Animate(), this.speed);
這是預計每運行一次這個速度。是的,但瀏覽器只運行一次。這有什麼可能的原因?Javascript setInterval只運行一次
如果Animate
是派生功能從原型,你將不得不使用:
setInterval(this.Animate.bind(this), this.speed);
+1很有可能當前這個'this'需要保留爲調用上下文。 – 2012-03-15 17:31:48
執行以下操作:
setInterval(this.Animate, this.speed);
您正在執行的函數,而不是分配給在一定的時間間隔要執行的函數的引用...
讓我們看看你的代碼
setInterval(this.Animate(), this.speed);
什麼跟它運行功能this.Animate()
馬上和存儲返回什麼都被調用。
你想要做的是創建一個封閉
var that = this;
setInterval(function(){ that.Animate() }, this.speed);
的that
保持當前的範圍。
嘗試用括號運行功能,當你把括號它總是調用,而不是通過它的功能,這是你想要的這裏:
setInterval(this.Animate, this.speed);
如果還是不行,你要調試,並找出哪些是「本」的範圍,因爲「這」可能會改變。您可以通過在瀏覽器的JS調試器添加斷點做到這一點。 此外,你可以試試這個,以避免與「應用」
var animate = this.animate.apply(this)
setInterval(animate, this.speed);
P.S範圍的問題:這可能是一個不錯的選擇,以避免setInterval的動畫,因爲他們可能在一次排隊,然後起火。相反,在函數(this.Animate)的末尾調用setTimedout一次又一次爲使創建一個循環。
如果你正在尋找一個jQuery刷新腳本,嘗試:
refreshId = setInterval(function() {
// Events or Actions
}, 5000);
如果你想暫停或停止這種情況,使用明確的時間間隔:clearInterval(refreshId);
。
我們如何定義'this' – 2012-03-15 17:27:57
指向同一類的指針...... – 2012-03-15 18:31:43