var props = 'transform WebkitTransform MozTransform OTransform msTransform'.split(' '),
大家可以参考《使用Javascript动态管理CSS》
2.5.3、 一些JS类库
http://daneden.me/animate/
Transiton过渡动画的集合,animate.css可以直接引用到你的项目中;
JQUERY TRANSIT
http://ricostacruz.com/jquery.transit/
move.js
http://visionmedia.github.com/move.js/
http://jsanim.com/
一个动画库,只有25KB,非常强大;
2.6、 CSS3在手机端的实现
新款的智能手机基本能够支持CSS3动画。在做手机QQ网购APP的时候,我们总结了以下几点经验:
l 在相同配置下安卓4.X以下版本系统自带的浏览器或者第三方浏览器使用2D变换改变top,left的方式比用3D TransformXY的速度慢了很多倍,或者是完全无法运行,在4.x版本表现比较良好;
l 同样系统不同配置时,高配要比低配表现好不少;
l 3D TransformXY可以调用手机的GPU资源,也就是可以硬件加速,但是代价就是加速耗电;
l IOS没有这些问题;
2.7、性能
l CSS 2D矩阵动画效率高于JS利用margin和left,top模拟的矩阵动画;
l CSS3其它常规动画属性的效率低于JS模拟的动画;
l 过度使用infinite导致帧数明显下降,且webkit下明显比firfox下更卡;
2.8 、CSS3动画总结:
优点
简单,无需其他支持;
简单动画可以直接在CSS中实现,无需JS
可以支持3D效果变换;
可以通过优化硬件来优化动画;
无线端支持非常好;
缺点
需要书写大量前缀来兼容浏览器;
IE10以下支持非常少;
市面上目前制作调试工具较少,只能靠自己测试;
Tips
l 在IOS上表现非常好,andriod平台与硬件配置有很大关系,如果不考虑能耗问题,硬件加速效果很好;
l 一些CSS自有属性的改变建议使用JS来控制;
l Infinite属性勿滥用,会导致网页帧数显著降低;
l 可以通过一些工具来制作,减少代码成本;
l Transform中要注意顺序问题:
n perspective必须在最前面
http://www.alloyteam.com/2012/10/the-css3-transform-perspective-property/
n rotateX与rotate的顺序对效果有影响。
http://www.alloyteam.com/2012/11/the-order-of-roate-with-rotatex-problem/
3、 JavaScript动画
用JavaScript做动画,就是利用setInterval和setTimeOut调用定时器,不断修改属性、刷新页面的。原理很简单,现在已经有很多动画库了,比如jQuery。这里仅介绍一些注意事项
1. 大家时刻牢记JavaScript与UI共享浏览器线程 因此一定要注意因此带来的性能问题。
2. 关于15毫秒与33毫秒,JS定时器不是很精确,精度差一些的浏览器只有15ms。为了保险期间,可以扩大至2倍,33毫秒正好是每秒30帧。
3. 注意重绘(redraw)与重排(reflow)
a) 一次性对多个属性赋值,避免在IE下闪烁 如: node.cssText = "heigth:100px;width:100px;top:100px";
b) 将动画元素使用绝对定位,提出页面布局流之外
4 、 Canvas动画
Canvas是HTML5中最强大一个特性,它使用Immediate Model,而不是Retain Model(Flash,Silverlight的模式)。Immediate Model的特点是:
浏览器只显示唯一的对象(canvas本身)
开发者自行维护逻辑显示对象
Logical Display Object
需要自己处理鼠标和键盘事件
需要自己开发控件,也可以与已有控件交互
与Video,Audio的结合非常灵活
可以支持2D,3D
Canvas还可以非常好的与视频和音频结合。
Canvas的自由度非常大,几乎什么都可以通过JS控制,但相应的工作量也比较大。关于Canvas向大家推荐,O’Reilly的《HTML5 Canvas》。本人正在翻译这本书,预计明年上半年中文版可以与大家见面。