用 transform 做动画真的能提升性能吗?为什么我的页面还是卡?
我听说用 transform 做动画不会触发重排,应该更流畅,但我在做一个滑动菜单时还是明显卡顿,是不是哪里写错了?
我试过只用 transform: translateX 来移动元素,也加了 will-change: transform,但低端机上滑动还是掉帧。下面是我的简化代码:
const menu = document.querySelector('.menu');
let x = 0;
document.addEventListener('mousemove', (e) => {
x = e.clientX - 100;
menu.style.transform = <code>translateX(${x}px)</code>;
});
难道光用 transform 不够?还需要配合其他优化手段吗?
省事的话,用 requestAnimationFrame 包装一下,让浏览器自己优化更新时机:
或者更懒——直接用 CSS transition,鼠标移入移出时自动平滑:
第二种写法代码少一半,性能反而更好,因为 CSS 动画跑在合成线程上,不受 JS 主线程阻塞影响。