如何让SVG动画在移动端流畅播放?
最近我在做一个项目,需要在手机上展示一些SVG动画。但是发现动画播放时卡顿明显,特别是在安卓设备上。
我试过优化了SVG文件大小,也减少了动画的复杂度,但效果还是不理想。想知道有没有什么特别的方法或者技巧可以改善这个问题?
<svg width="100" height="100" viewBox="0 0 100 100">
<circle cx="50" cy="50" r="40" fill="none" stroke="#000" stroke-width="10">
<animate attributeName="r" from="10" to="40" dur="2s" repeatCount="indefinite"/>
</circle>
</svg>
先检查一下动画是否触发了重排或重绘,比如用
transform或opacity属性来做动画会更高效,因为这些属性能被GPU加速。像你的例子中用了r属性做动画,这会触发重绘,换成transform: scale会更好。试试下面这段修改后的代码:
另外,考虑用CSS来控制动画,而不是内联的SMIL动画。因为现在很多浏览器已经开始逐步废弃SMIL,改用CSS动画或requestAnimationFrame会更稳定高效。
最后,如果动画依然卡顿,说明当前的合成方式可能没利用上GPU,可以尝试加一个
translateZ(0)或者will-change: transform让浏览器提前做好硬件加速准备。requestAnimationFrame手动实现:就这样。