移动端CSS动画在iOS上卡顿怎么解决?
我在移动端做一个图片缩放动画,用CSS的scale属性写了个@keyframes,但在iPhone上运行特别卡顿。
代码是这样的:
<style>
.scale-animation {
animation: zoom 1s infinite;
}
@keyframes zoom {
50% { transform: scale(1.2); }
}
</style>
<img src="test.jpg" class="scale-animation">
已经尝试过把transform写成”translateZ(0) scale(1.2)”也没改善,用浏览器开发者工具模拟iOS设备时fps掉到20多帧。安卓设备没问题,这是iOS特有的兼容问题吗?
试试改成这样:
关键点在于:
用translate3d代替translateZ,iOS对这个属性优化更好
初始scale设为1保持视觉一致
加上will-change: transform预判渲染层
另外图片最好加上display: block,有时候inline元素会有额外渲染开销。如果动画区域比较复杂,建议用开发者工具的"连续屏幕截图"功能看看有没有意外的重排。
实在不行可以考虑用requestAnimationFrame自己实现一个简单的缩放动画,虽然代码多点但控制更精细。iOS的渲染引擎对自定义动画的优化确实比CSS动画好不少。
backface-visibility: hidden;和will-change: transform;:如果还卡,检查图片大小,太大也会掉帧。