【发布时间】:2013-12-16 14:33:45
【问题描述】:
考虑下面的代码块
var interval = setTimeout(function()
{
var left = parseInt(self.element.style.left) - 10;
var width = parseInt(self.element.style.width) + 10;
if(width <= self.width)
{
self.element.style.left = left + "px";
self.element.style.width = width + "px";
setTimeout(increaseWidthLeft(self), 10);
}
else
{
window.clearInterval(interval);
}
}, 5);
还有这个:
var interval = setTimeout(function()
{
var left = parseInt(self.element.style.left) - 10;
var width = parseInt(self.element.style.width) + 10;
if(width <= self.width)
{
self.element.style.left = left + "px";
self.element.style.width = width + "px";
setTimeout(function(){increaseWidthLeft(self);}, 10);
}
else
{
window.clearInterval(interval);
}
}, 5);
它们几乎一样吧?但是当我运行第一个版本时,“动画”以惊人的速度运行......但是第二个版本的运行速度比第一个版本慢了近 3 倍。这里发生了什么?非常感谢任何帮助
【问题讨论】:
-
我不确定这是否与您的问题有关,但您设置了
Timeout并清除了Interval。你应该使用clearTimeout()。clearInterval()和clearTimeout()不可互换。有关详细信息,请参阅this 答案。 -
感谢您指出这一点。
-
对于任何未来的访问者,W3C 规范的定义方式使得 clearInterval 和 clearTimeout 可以互换。使用正确的代码可读性仍然很好,但在功能方面,它们应该做完全相同的事情。 stackoverflow.com/questions/9913719/…