下面代码,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);
文档里面定义的是下一次重绘之前调用,所以他更新的是下一帧。