【发布时间】:2012-08-06 11:15:08
【问题描述】:
我想使用javascriptsetInterval函数来实现一个盒子旋转动画效果,我希望动画保持1.5秒,1.5秒内盒子会旋转360度,所以我以一毫秒计算增量,并使用setInterval函数每毫秒。这是我的代码:
var duration= 1500;//The animation duration time
var rotate = 360;//The rotate need to be rotate
var degPerSec = rotate / parseFloat(duration); //the increment per millisecond
var degree = 0;//the begin degree
console.time('rotate');
var timer = setInterval(function () {
degree = degree + degPerSec;
$('#test')[0].style.MozTransform = 'rotate(' + degree + 'deg)';
$('#test')[0].style.WebkitTransform = 'rotate(' + degree + 'deg)';
if (degree >= rotate) { //if reach 360 degree , clear the interval
clearInterval(timer);
console.timeEnd('rotate');// caculate the duration
}
}, 1)
})
动画可以成功执行,但是好像不止1.5s,当我用console.time计算整个持续时间时,它持续了大约6s!不是1.5s。为什么会发生这种情况?我该如何解决这个问题?
这里是demo
更新:: 为什么我不使用css3:因为旋转度数是作为参数,需要在外部传递表单,尚未定义
【问题讨论】:
-
JavaScript 不保证计时器间隔,
1ms几乎是不可能的。请参阅 this article 以获得出色的解释。
标签: javascript animation setinterval