canvas可以添加css3特效吗

html-css013

canvas可以添加css3特效吗,第1张

作者:鲁小夫

链接:https://www.zhihu.com/question/26585266/answer/33518900

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

canvas可以添加css3特效:

用css3动画,也就意味着需要依赖dom,动画都是作用在dom上的。而移动浏览器上的dom性能真是低下,因为这里面涉及到排版引擎,你只能通过减少节点和操作去规避问题,却很难解决。

而canvas动画把整个画布的控制权交给你了,动画性能的上限也由程序员来把握。

有人说canvas动画性能不如css3动画,在排版引擎不成为瓶颈的情况下是成立的,毕竟css3动画更方便,更与内容分离。但不要忘了,css3动画虽然不占用js主线程,却受排版引擎的限制,与整个页面的dom结构息息相关。你想想,假如dom真是万能的话,canvas是用来做啥的呢?事实上,像素操作比dom操作性能要高得多,就连2048这样简单的游戏,用dom来写,在手机上都觉得css3动画帧率不行了,我基本上只敢用dom来做找茬这样的无动画游戏。

总结,dom和css3动画是用来给内容布局加上特效的通用解决方案,在性能堪忧的移动浏览器上很可能会受排版性能所限,达不到理想的效果。而对性能有要求的特定场景,比如游戏,用canvas会有很大的提高,如果觉得事件和坐标管理麻烦的话,可以用一个好一些的游戏引擎。对于大量创建销毁对象的情况,例如打飞机游戏,你可能还需要用到对象池,毕竟js gc的开销也是够呛。

这个是一个伪命题。

你举的例子并不确切,换句话说你并不是因为要做一个平移的的动画而考虑应该用css还是canvas。

css3动画很丰富,并且浏览器支持度相对已经很好了。再加上css3可以使用gpu加速,性能上已经很好了(如果使用得当的话,我已经不知道看过多少使用不当而认为css动画性能差的例子)

当然canvas也有很多错误使用,导致性能变差

而canvas个人认为更适合像素级别的绘制。这是css无法做到的。

canvas有专门的画布,其并不急于dom,因此性能上和css3会有一点不同,有时候canvas动画会更平滑。

有人做过测试, canvas和css3动画其实在不同场景各有优略。