requestAnimationFrame动画
小于 1 分钟
requestAnimationFrame动画
function animate({timing, draw, duration}) {
let start = performance.now();
requestAnimationFrame(function animate(time) {
// timeFraction 从 0 增加到 1
let timeFraction = (time - start) / duration;
if (timeFraction > 1) timeFraction = 1;
// 计算当前动画状态
let progress = timing(timeFraction);
draw(progress); // 绘制
if (timeFraction < 1) {
requestAnimationFrame(animate);
}
});
}
animate 函数接受 3 个描述动画的基本参数:
duration动画总时间,比如1000。timing(timeFraction)时序函数,类似 CSS 属性transition-timing-function,传入一个已过去的时间与总时间之比的小数(0代表开始,1代表结束),返回动画完成度(类似 Bezier 曲线中的y)。draw(progress)获取动画完成状态并绘制的函数。值progress = 0表示开始动画状态,progress = 1表示结束状态。