加载中...
requestAnimationFrame 是浏览器提供的动画调度接口,它在下一次重绘前调用指定回调,使动画与显示器刷新率同步。相比定时器,它更流畅、省电,是实现平滑网页动画的标准做法。

| 类型 | 浏览器动画调度 API |
| 执行时机 | 下一次重绘前 |
| 同步对象 | 显示器刷新率 |
| 后台行为 | 自动暂停或降频 |
| 取消方法 | cancelAnimationFrame |
requestAnimationFrame 是浏览器提供的一个用于优化动画的 API。它请求浏览器在下一次页面重绘之前执行指定的回调函数,使动画更新与显示器的刷新节奏保持同步,从而获得平滑的视觉效果。
在该 API 出现之前,网页动画多用定时器按固定间隔更新画面,但定时器与浏览器的实际绘制时机并不对齐,容易造成掉帧、卡顿或多余的重绘。requestAnimationFrame 将回调交由浏览器统一调度,在最恰当的时机(通常约每秒 60 次,并随刷新率自适应)执行动画逻辑。
requestAnimationFrame 是编写高性能网页动画的标准方式,广泛用于逐帧动画、滚动视差、canvas 与游戏循环、平滑滚动、以及将高频事件(如滚动、鼠标移动)的处理节流到每帧一次,避免过度计算导致的卡顿。
问:它和 setInterval 做动画有何区别?答:setInterval 按固定时间触发,与绘制不同步,易掉帧且后台仍运行;requestAnimationFrame 与重绘同步,更流畅,页面不可见时会自动暂停。
问:如何控制动画速度不受刷新率影响?答:利用回调传入的时间戳计算相邻两帧的时间差,按实际经过的时间来推进动画,可在不同刷新率设备上保持一致速度。

| 类型 | 浏览器动画调度 API |
| 执行时机 | 下一次重绘前 |
| 同步对象 | 显示器刷新率 |
| 后台行为 | 自动暂停或降频 |
| 取消方法 | cancelAnimationFrame |
登录 后参与讨论
暂无讨论,来发表第一条评论吧