移动端加载动画卡顿,怎么优化都不行怎么办?
我在写一个旋转的加载动画组件,用CSS transform旋转的三个圆点,但在iPhone XR上明显卡顿。代码是这样的:
.loader span {
display: inline-block;
width: 15px;
height: 15px;
margin: 0 3px;
background: #333;
border-radius: 50%;
animation: spin 1.2s infinite ease-in-out;
}
@keyframes spin {
0%, 80% { opacity: 0.3; }
40% { opacity: 1; }
100% { transform: rotate(360deg); }
}
已经尝试过把动画改成transform: translateZ(0)触发GPU加速,也把opacity改成transform scale,但转动到360度的时候还是会有掉帧。用Chrome开发者工具模拟移动端也没问题,真机测试就很卡…
transform: rotate(360deg)这个地方效率不够高。旋转本身没问题,但涉及到多个元素同时动画时,浏览器的渲染压力会变大,尤其是在低端设备上。我的建议是把整个动画改成只用
transform: scale来实现,完全去掉rotate。这样可以减少不必要的复杂计算,GPU加速也会更高效。另外,三个圆点的动画可以通过animation-delay错开时间,而不是每个都单独定义。优化后的代码如下:
这样写的好处是:
1. 完全避免了旋转带来的额外计算
2. 每个圆点的缩放动画独立,帧率更稳定
3. GPU加速对缩放的支持比旋转更友好
最后再提醒一下,真机测试的时候,尽量关闭其他耗电的应用,确保手机没有过热情况,因为过热会导致CPU/GPU降频,进一步影响动画性能。