我使用JavaScript在18秒内动画转换36000种颜色。当用户按下按钮时,应该通知他在点击按钮时动画的颜色。但是,JavaScript以毫秒为单位测量时间,这基本上意味着如果用户在t = 10ms时按下按钮,动画将处于颜色20,当他在t = 11ms时按下它时,动画将已经在22。
有没有办法更准确地测量JavaScript中的时间?因此,例如,我可以告诉按钮在t = 10.5ms时被按下,因此动画将是21号颜色。
答案 0 :(得分:4)
较新的浏览器版本支持performance.now,提供时间
以毫秒为单位测量,精确到千分之一毫秒。
performance.now使用DomHighResTimeStamp作为具有以下属性的时间值
单位是毫秒,应精确到5微秒(微秒)。
var t1 = performance.now();
var t2 = performance.now();
console.log('passed ' + (t2 - t1) * 1000.0 + ' microseconds');
可以找到填充here,并且可以找到支持的浏览器列表here。
保罗爱尔兰人performance.now
上的article是好的
这里需要注意的一点是,浏览器通常以每秒60帧的速度渲染屏幕,或者每16-167毫秒渲染一次,与执行动画的页面无关。这意味着您尝试做的事情可能是不可能的,因为尽管JS代码可以在不到一毫秒的时间内运行,但动画总是至少相隔16.67ms。因此,实际上会显示每种~32种颜色,因为您试图每1ms显示2种颜色。
要以浏览器的帧速率更新颜色,请使用requestAnimationFrame。
注意:60fps是最常见的,但浏览器将调整为屏幕的刷新率。