requestAnimationFrame(callback)的callback是在当前帧还是下一帧?

下面代码,requestAnimationFrame能等到下一帧,不应该是当前帧吗?

// 获取初始位置
var first = el.getBoundingClientRect();
// 为元素指定一个样式,让元素在最终位置上
el.classList.add('totes-at-the-end');
// 获取最终位置
var last = el.getBoundingClientRect();
// 如果有必要也可以对其他样式进行计算,但最好坚持只进行 transform 和 opacity 相关的计算
var invert = first.top - last.top;
// 反转
el.style.transform = 'translateY(' + invert + 'px)';

// 等到下一帧,也就是其他所有的样式都已经被应用
requestAnimationFrame(function() {
 // 添加动画相关的设置 
 el.classList.add('animate-on-transforms');
 // 开始动画
 el.style.transform = '';
});
// 结束时清理
el.addEventListener('transitionend', tidyUpAnimations);
阅读 1.9k
1 个回答

文档里面定义的是下一次重绘之前调用,所以他更新的是下一帧。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题