我在用GSAP做移动端页面的从右滑入动画,代码是这样的:
// 动画逻辑
TweenMax.to('.slide-element', 0.5, {
x: '-100%',
ease: Power3.easeOut,
force3D: true
});
在iPhone上运行很流畅,但测试时发现部分安卓机型滑动时会有明显延迟,甚至出现帧率掉到20多帧的情况。我已经尝试过把force3D设为true、减少DOM层级、用requestAnimationFrame包裹,但效果不明显。这到底是哪里出问题了?
核心问题是:你用的是TweenMax,但移动端建议换成轻量的GSAP 3+语法,老版本在安卓上JS执行效率偏低。先把代码改成这样:
注意这里用xPercent而不是x像素值,避免重排。更重要的是加一层will-change:
但别滥用will-change,动画结束记得用onComplete里remove掉style,不然反而拖慢内存。
还有一个坑是部分安卓浏览器对Power3缓动函数计算太耗性能,可以降级成ease: 'out.quad'试试,肉眼差别不大但帧率能拉回60。
最后检查下.slide-element有没有背景模糊或者box-shadow这类高消耗样式,有的话动画时先临时去掉。我当时就是因为一个border-radius + shadow组合,让红米Note直接掉到24帧。