Javascript setInterval只运行一次

时间:2012-03-15 17:26:45

标签: javascript html dynamic methods setinterval

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

预计每隔这个时间运行一次。是的,但浏览器只运行一次。可能的原因是什么?

5 个答案:

答案 0 :(得分:7)

如果Animate是原型的派生函数,则必须使用:

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

答案 1 :(得分:6)

尝试在没有括号的情况下运行你的函数,当你放括号时它总是调用函数而不是传递它,这就是你想要的:

setInterval(this.Animate, this.speed);

如果它仍然不起作用,你应该调试并找出'这个'的范围,因为'这个'可能会改变。您可以通过在浏览器的JS调试器中添加断点来实现。 此外,您可以尝试这样做以避免使用' apply'

的范围问题
var animate = this.animate.apply(this)
setInterval(animate, this.speed);

p.s:为动画避免使用setInterval可能是一个不错的选择,因为它们可能会排队然后立即触发。而是在函数末尾(this.Animate)一次又一次地调用setTimedout,以便创建一个循环。

答案 2 :(得分:5)

执行以下操作:

setInterval(this.Animate, this.speed);

您正在执行该功能,而不是指定要以特定间隔执行的功能的引用...

答案 3 :(得分:3)

让我们看看你的代码

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

它所说的是立即运行函数this.Animate()并存储它返回的内容。

你想要做的是创建一个闭包

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

that维持当前范围。

答案 4 :(得分:1)

如果您正在寻找JQuery刷新脚本,请尝试:

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

如果您想要暂停或停止此操作,请使用清除间隔:clearInterval(refreshId);