我认为它涉及setinterval
我使用此
得到了第二个var s=today.getSeconds();
然后使用setinterval
我有这个
setInterval(function(){ alert("Hello"); }, 3000);
问题......我不认为我可以将秒数除以60并使用#34;异步"我想我正确地使用了这个词,一个秒的单位分为60次,每1/60增量发生一次
我想知道我是否应该/必须使用毫秒,因为这些单位存在,我可能只是使用比率或某事来相当于一秒/六十
答案 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);