Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用javascript在一秒钟内完成60次操作_Javascript_Count_Division - Fatal编程技术网

如何使用javascript在一秒钟内完成60次操作

如何使用javascript在一秒钟内完成60次操作,javascript,count,division,Javascript,Count,Division,我相信这涉及到时间间隔 我有第二个用这个 var s=today.getSeconds(); 然后使用setinterval 我有这个 setInterval(function(){ alert("Hello"); }, 3000); 问题是。。。我不认为我可以将一秒除以60,然后使用“异步”这个词,我认为我用的是正确的,一秒单位除以60次,每增加1/60次,就会发生一些事情 我想知道我是否应该/必须使用毫秒,因为这些单位存在,我可能只会使用一个比率或其他东西来表示秒/六十 var time

我相信这涉及到时间间隔

我有第二个用这个

var s=today.getSeconds();
然后使用setinterval

我有这个

setInterval(function(){ alert("Hello"); }, 3000);
问题是。。。我不认为我可以将一秒除以60,然后使用“异步”这个词,我认为我用的是正确的,一秒单位除以60次,每增加1/60次,就会发生一些事情

我想知道我是否应该/必须使用毫秒,因为这些单位存在,我可能只会使用一个比率或其他东西来表示秒/六十

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);
})()


Sure requestAnimationFrame很不错,但在较旧的浏览器上不受支持。如果您想要在旧浏览器中运行代码,我建议您使用递归settimeout方法。这在任何地方都适用

六十分之一秒大约是16毫秒,因此您可以执行以下操作:

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

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

为此,建议使用 而不是
setInterval

所以不是

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

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

来自MDN:

当您准备好更新您的应用程序时,应该调用此方法 屏幕上的动画。这将要求禁用动画功能 在浏览器执行下一次重新绘制之前调用用户数量 回调通常为每秒60次,但通常与 根据W3C建议,在大多数web浏览器中显示刷新率。

运行时,回调速率可能会降低到较低的速率 背景选项卡。


名称
requestAnimationFrame
可能有点混淆,但您应该将其理解为“请在浏览器准备好重新绘制屏幕时运行我的
回调”
,即,您让浏览器决定确切的时间,而不是自己强加时间。

setInterval(function(){alert(“Hello”);},100/6);你有什么理由需要每秒运行60次吗?如果这是为了渲染一些动画,您应该查看
requestAnimationFrame
。我不确定是否要使用animate,我的意思是,是的,我正在某个时间帧生成和移动元素,但我肯定会查看/很可能会应用它。我“我正在想办法重新粉刷什么is@Jonathan-你说得对,搞砸了!:-)你的意思是下一个调用将一直等到上一个调用执行完毕。无论如何,灾难性的影响;)。16毫秒很短,你可以有很多逻辑,不同的浏览器有不同的执行速度。谢谢你,我要试一试,一旦项目完成,我可能会在这里提到它假设我成功了,我关心的是服务器的使用,这不是一个计算的东西,我的意思是在某种程度上是的,主要是翻译。很抱歉,我不明白“更新动画”是什么意思。动画是线性的吗?他们不会遵循曲线方程吗?我的目标是使用函数定义元素的位置,所以我想知道这个requestanimation是否仍然有效/应该是我需要做的事情。当我运行网页时,我很想看到一个实时的服务器消费输出,我看到Chrome的开发工具正是这样做的,以显示重新绘制某些帧有多么昂贵……任何改变网页某些视觉方面(例如位置、大小、颜色、边框等)的东西都可以被视为“动画”,粗略地说。您通常希望将动画进度与经过的时间相关联;为此,可以创建一个变量,该变量将以毫秒为单位存储动画开始后的时间,并在回调函数中计算当前时间和动画开始时间之间的差值,并基于该数据,调整回调的作用。理论上,您也可以使用
setInterval
n
毫秒,并假设两次回调调用之间经过的时间正好相同,但
setInterval
中的超时通常是两次调用之间的最短时间;在长期运行的网页中,这些微小的差异将构成一个重大的转变。最好总是计算两个时间戳之间的差异,以获得最佳结果。o当使用
requestAnimationFrame
而不是
setInterval
时,除了浏览器所能做到的最好外,您无法保证两次调用之间的时间差。我尝试了requestAnimationFrame和setInterval,它们都是不稳定的,我不知道除了服务器成本之外,这是否是一个很大的原因,为什么运动通常被避免。或者我只是做得不对。我在关于rAF的css技巧上看到了这个动画,它显示正方形填满了一个空间,看起来很平滑,尽管这是一个纯色,而不是一个里面有文本的文本框。
setInterval(function () {
   doSomething();
}, 16)
function myFunction () {
   doSomething();
   requestAnimationFrame(myFunction);
}
requestAnimationFrame(myFunction);