如何用javascript一秒钟做60次

时间:2015-02-17 13:11:15

标签: javascript count division

我认为它涉及setinterval

我使用此

得到了第二个
var s=today.getSeconds();

然后使用setinterval

我有这个

setInterval(function(){ alert("Hello"); }, 3000);

问题......我不认为我可以将秒数除以60并使用#34;异步"我想我正确地使用了这个词,一个秒的单位分为60次,每1/60增量发生一次

我想知道我是否应该/必须使用毫秒,因为这些单位存在,我可能只是使用比率或某事来相当于一秒/六十

4 个答案:

答案 0 :(得分:6)

正如评论中所建议的那样,由于您每秒要求60次,这可能意味着您想要更新动画,即更改屏幕上某些DOM元素的颜色,位置,形状等。

为此,建议使用 requestAnimationFrame代替setInterval

所以而不是

setInterval(function () {
   doSomething();
}, 16)

使用

function myFunction () {
   doSomething();
   requestAnimationFrame(myFunction);
}
requestAnimationFrame(myFunction);

这允许浏览器执行某些优化。

来自MDN:

  

每当您准备好更新时,都应该调用此方法   动画在屏幕上。这将要求您的动画功能   在浏览器执行下一次重绘之前调用。 数量   回调通常是每秒60次,但通常会匹配   根据W3C推荐,在大多数Web浏览器中显示刷新率。

     

运行时,回拨率可能会降低到较低的比率   背景标签。

名称requestAnimationFrame可能有点令人困惑,但您应该将其读作“请在浏览器准备好重新绘制屏幕时运行我的callback”,即您让浏览器决定确切的时间,而不是自己强加。

答案 1 :(得分:1)

var time = 1000/60;  
setInterval(function(){ alert("Hello"); }, time);

1000是毫秒除以60。

但是这种方法有所下降,如果你的功能在那段时间没有时间运行(非常短的时间跨度),它将不会等到它完成。因此它会对您的应用程序产生相当大的灾难性影响。

然后以递归方式调用setTimeout会更好,所以它会在再次调用之前完成执行。

var time = 1000/60;  
(function loop(){
   setTimeout(function(){

      // logic here

      // recurse
      loop();

  }, time);

})();

当然requestAnimationFrame很不错但旧浏览器不支持它。如果你想在旧浏览器中使用代码,我建议使用递归settimeout方法。那将无处不在!

答案 2 :(得分:1)

setInterval(function(){ alert("Hello"); }, 1000/60);

答案 3 :(得分:0)

六十分之一秒大约是16毫秒,所以你可以这样做:

setInterval(function(){ alert("Hello"); }, 16);