高效动画

现代浏览器在完成以下四种属性的动画时,消耗成本较低: position(位置), scale(比例缩放), rotation(旋转) 和 opacity(透明度)。如果你对其他的属性设置动画,你就需要对你的冒险负责。而且你的动画将可能达不到流畅的60fps。

浏览器处理的步骤,自上而下执行

因此为了达到平滑动画的效果,最好就是修改影响最后一个步骤(Composite Layers)的属性(transform and opacity)

常用的,会触发布局的样式

width height
padding margin
display border-width
border top
position font-size
float text-align
overflow-y font-weight
overflow left
font-family line-height
vertical-align right
clear white-space
bottom min-height

常用的,会触发重绘的样式

 
color border-style
visibility background
text-decoration background-image
background-position background-repeat
outline-color outline
outline-style border-radius
outline-width box-shadow
background-size

注意:有一个CSS属性改变它不一定会导致重绘:opacity。

Changes to opacity can be handled by the GPU during compositing by simply painting the element texture with a lower alpha value. For that to work, however, the element must be the only one in the layer. If it has been grouped with other elements then changing the opacity at the GPU would (incorrectly) fade them too.

In Blink and WebKit browsers a new layer is created for any element which has a CSS transition or animation on opacity, but many developers use translateZ(0) ortranslate3d(0,0,0) to manually force layer creation. Forcing layers to be created ensures both that the layer is painted and ready-to-go as soon as the animation starts (creating and painting a layer is a non-trivial operation and can delay the start of your animation), and that there‘s no sudden change in appearance due to antialiasing changes. Promoting layers should done sparingly, though; you can overdo it and having too many layers can cause jank.

keyframe相关属性:

@keyframes                         规定动画。

animation                                 所有动画属性的简写属性,除了 animation-play-state 属性。

animation-name                 规定 @keyframes 动画的名称。

animation-duration                 规定动画完成一个周期所花费的秒或毫秒。默认是 0。

animation-timing-function 规定动画的速度曲线。默认是 "ease"。

animation-delay                 规定动画何时开始。默认是 0。

animation-iteration-count         规定动画被播放的次数。默认是 1。

animation-direction                 规定动画是否在下一周期逆向地播放。默认是 "normal"。

animation-play-state                 规定动画是否正在运行或暂停。默认是 "running"。

animation-fill-mode                 规定对象动画时间之外的状态。

FPS值越高代表画面越流畅。现在,像Chrome, FireFox, Safari, IE9+和最新版本的Opera都支持硬件加速,当它们检测到页面中某个DOM元素应用了某些CSS规则时就会开启,最显著的特征的元素的3D变换。 传统来说,网页内容是完全依赖于CPU来渲染的,这也称作软件渲染 (software rendering),随着GPU的发展越来越好,在图形3D等方面的优势很明显,GPU有个特性是分层渲染,这样的话就可以让CPU和GPU同时并行工作,大大提高网页渲染的速度。

时间: 2024-10-14 11:53:11

高效动画的相关文章

GPU Skinning 结合 Instanced 高效实现大量单位动画

GPU Skinning 与 Instance 蒙皮动画 计算骨骼信息 蒙皮 GPU Skinning CPU Skinning 与 GPU Skinning 实现方式 Skinning 类型 优点 CPU Skinning 各平台相似稳定 无 CPU/GPU 传输损耗 ---- ---- GPU Skinning 多核并行计算 访存速度更快 浮点运算能力更高 Unity GPU Skinning 与 自定义 GPU Skinning 实现方式 目前 Unity 拥有一套 GPU Skinnin

使用jQuery快速高效制作网页特效-----------------------------之jQuery事件与动画

1.基础事件 分为三个事件 1.1 window事件 所谓window事件,就是当用户执行某些会影响浏览器的操作时,而触发的事件. 1.2 鼠标事件 鼠标事件顾名思义就是当用户在文档上移动或单击鼠标时而产生的事件. 1.click事件:    单击鼠标时触发 $('p').click(function(){}); 2.mouseover事件: list.mouseover(function(){ $(this).css("background","pink"); }

requestAnimationFrame动画方法

一.动画方式 在HTML5/CSS3时代,实现动画的方式有许多种: 你可以用css3的animation和@keyframes: 可以用css3的transition: 还可以用原始的setTimeout().setInterval()达到动画效果,以及jQuery中animate方法: 今天我们要介绍是另一种动画方式:requestAnimationFrame(callback)! 二.基本语法 可以直接调用,也可以通过window来调用,接收一个函数作为回调,返回一个ID值: ID=requ

使用IntersectionObserver更高效的监视某个页面元素是否进入了可见窗口

比如说,你想跟踪 DOM 树里的一个元素,当它进入可见窗口时得到通知. 也许想实现即时延迟加载图片功能,或者你需要知道用户是否真的在看一个广告 banner. 你可以通过绑定 scroll 事件或者用一个周期性的定时器,然后再回调函数中调用元素的 getBoundingClientRect() 获取元素位置实现这个功能. 但是,这种实现方式性能极差,因为每次调用 getBoundingClientRect() 都会强制浏览器重新计算整个页面的布局,可能给你的网站造成相当大的闪烁. 如果你的站点被

cocos2d-x 3.x之动画

动画由帧组成.在最简单的情况下,每一帧都是一个纹理.我们可以使用一个纹理序列来创建动画.然而显卡在绘图时,在纹理间的切换是一个巨大的开销,由于精灵可以显示部分纹理,因此通常更为高效的做法是把动画用到的多个纹理按照一定的顺序排列起来,然后放置在同一个纹理下.在创建动画时,我们不仅需要指定动画所使用的纹理,还需要指定每一帧所使用的是纹理的哪一部分. 为了方便地记录纹理的显示信息,cocos2d-x提供了框帧类SpriteFrame.一个框帧包含两个属性,纹理与区域.纹理指的是将要被显示的纹理,而区域

编写高效的jQuery代码

最近写了很多的js,虽然效果都实现了,但是总感觉自己写的js在性能上还能有很大的提升.本文我计划总结一些网上找的和我本人的一些建议,来提升你的jQuery和javascript代码.好的代码会带来速度的提升.快速渲染和响应意味着更好的用户体验.谨以此文来提醒自己. 首先,跟大家推荐一下jQuery API 文档 http://www.css88.com/jqapi-1.9/ ,她会告诉你使用jQuery时应该注意的哪些问题,性能建议,及哪些情况下可能会出现问题:帮助你更好的了解和掌握jQuery

iOS核心动画

iOS开发系列--让你的应用“动”起来 --iOS核心动画 概览 在iOS中随处都可以看到绚丽的动画效果,实现这些动画的过程并不复杂,今天将带大家一窥iOS动画全貌.在这里你可以看到iOS中如何使用图层精简非交互式绘图,如何通过核心动画创建基础动画.关键帧动画.动画组.转场动画,如何通过UIView的装饰方法对这些动画操作进行简化等.在今天的文章里您可以看到动画操作在iOS中是如何简单和高效,很多原来想做但是苦于没有思路的动画在iOS中将变得越发简单: CALayer CALayer简介 CAL

Javascript高性能动画与页面渲染

转自:http://www.infoq.com/cn/articles/javascript-high-performance-animation-and-page-rendering No setTimeout, No setInterval 如果你不得不使用setTimeout或者setInterval来实现动画,那么原因只能是你需要精确的控制动画.但我认为至少在现在这个时间点,高级浏览器.甚至手机浏览器的普及程度足够让你有理由有条件在实现动画时使用更高效的方式. 什么是高效 页面是每一帧变

IOS动画总结

IOS动画总结 http://blog.sina.com.cn/s/blog_611b9d9d01015dkm.html (2012-06-01 14:50:32) 转载▼ 标签: 杂谈 分类: IOS 一.基本方式:使用UIView类的UIViewAnimation扩展 + (void)beginAnimations:(NSString *)animationID context:(void *)context; // 开始准备动画+ (void)commitAnimations; // 运行