前端动画的本质与渲染的握手:丝滑与逻辑的相辅相成
2023-11-08 18:09:48
前端动画不再是什么新鲜事,它以花式装点前端,提升用户体验。编写一个丝滑流畅的动画不难,但想要真正弄懂背后的渲染和性能调优,让动画更进一步,就并非人人都会了。这篇文章中,我们将对前端动画的本质以及渲染机制做一次浅析,帮助你将技术和技巧结合,实现更优秀的前端动画。
从动画说原理
前端动画千变万化,但万变不离其宗,殊途同归,究其根本,动画就是利用时间差实现元素在不同位置上轮播,让用户看到连贯的动作效果,其原理和线下制作影片电影有很多相似之处,都在“制造幻觉”。前端动画的具体实现,主要是通过css或html在页面中制造元素移动、变化等,我们熟悉的页面滚动条、搜索动画提示等,都属于css动画。实现动画的关键是每帧之间展现的动画效果需要具有连续性,所以了解如何让动画更加流畅是掌握动画原理的重点。
渲染流程与动画性能
浏览器的渲染过程,大致可以分为“绘制”和“合成”两个部分。绘制,指的是将html、css等指令转化为像素级的图片,而合成则是将各个元素叠加在一起,最终展现到页面中。为了让动画效果顺滑,浏览器通常会利用定时器,来控制动画逐帧绘制。这就涉及到了浏览器自身刷新率的影响:浏览器刷新率越高,页面展示的动画帧率越高,页面就能越流畅。例如:目前市场主流的60赫兹刷新率,即代表着浏览器一秒内可以刷新60次,这将意味着动画每秒执行60个周期,换言之,60Hz下的动画只有做到16毫秒之内绘制完,才能做到帧帧连续。否则用户将察觉到明显的卡顿。
那么,如何才能让动画性能更好呢?1. 精简动画内容。 尽量减少动画中不必要的元素,减少动画时浏览器的压力。2. 利用css动画。 css动画基于gpu加速,性能比js动画更好。3. 减少动画的层级。 在css中层级(z-index)大的元素会覆盖下面的元素,增加浏览器的负担,因此要尽量减少这种层级,合理安排元素顺序。4. 减少动画的回流和重绘。 回流是网页布局和大小改变时,需要重新计算元素位置的过程;重绘是回流之后将最新计算的元素样式渲染出来。
值得一提的是,动画还可以通过减少不必要的重绘来提升性能。由于改变元素的属性会导致浏览器进行重绘,如果我们能够减少不必要属性的改变,就可以减少重绘次数。例如:动画中,如果不需要修改元素的位置,就可以只修改颜色或背景色,而不用修改位置。这样做可以减少一次重绘,提高动画性能。
作为初学者,在对动画一无所知时,很容易将动画搞得一团糟,踩很多坑。而那些惊艳的、流畅的前端动画,并不只是前端基础知识与动画原理的结合,还有很多交互设计与用户体验学的加持。也因此,想要真正在前端动画方面独当一面,不但需要对理论与实践有相当的了解,更需要在创意与设计方面不断打磨。而这个过程,也足以让你沉淀下来,成为前端开发路上的资深匠人。