如何使用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);