setInterval(this.Animate(), this.speed);
预计每隔这个时间运行一次。是的,但浏览器只运行一次。可能的原因是什么?
答案 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);
。