animation、transition和transform动画属性详解

关于上篇博文介绍回流和重绘,我们知道了应该尽量减少回流,或是重绘代替回流来达到优化的效果。优化中又不可避免地涉及到了animation动画属性造成页面加载延迟等相关的问题,于是专门写了这么一篇博文来介绍css3中的动画属性。
css中的与动画相关的属性一共有三:
  animation、transition和transform属性。其中animation属性和transition属性能够实现动画效果transform属性描述了元素静态样式(2D和3D变换),于是transform属性经常配合animation属性和transition属性使用。
  
1.transform(变换)属性描述的是元素静态样式
  transform属性应用于元素的2D或3D转换。这个属性允许你将元素旋转,缩放,移动,倾斜等。 必须是鼠标移上或者点击执行属性变化,鼠标离开属性回归。说到底就是属性不会变化。配合transition: 0.3s;(-webkit-transition: 0.3s;)才会有动画的效果,否则会很生硬。
  其中可能会用到css里的角度单位:
  deg——度数,一个圆共360度,IE9+
  grad——梯度,一个圆共400梯度,IE9+
  rad——弧度,一个圆共2n弧度,IE9+
  turn——转、圈,一个圆共1转,IE+ FireFox13.0+

属性值作用
translate对象进行2D空间或3D空间的位移。注:使用translate时需要注意位移量的百分比是相对元素自身宽高来计算的。
translate(x,y)2D位移。第一个参数为必须,是x轴上的位移量;第二个参数可不设置默认为0,是y轴上的位移量
translateX()指定x轴位移量
translateY()指定y轴位移量
translate3D(x,y,z)3D位移。第一个参数指定X轴的位移量, 第二个参数指定Y轴的位移量, 第三个参数指定Z轴的位移量, 3个参数缺一不可
translateZ()指定z轴的位移量
rotate对象进行2D空间或3D空间旋转。常与 transform-origin 一起使用。注:rotate值为正值时,顺时针旋转;否则逆时针旋转。在2D情况下,rotate()只能指定一个参数;在3D情况下,rotate3D()必须指定四个参数,否则将报错。
rotate()2D旋转。根据指定的旋转角度进行旋转
rotate3D()3D旋转,必须指定四个参数,前3个参数分别表示旋转的方向x y z, 第4个参数表示旋转的角度
rotateX()指定X轴的旋转角度
rotateY()指定Y轴的旋转角度
rotateZ()指定Z轴的旋转角度
scale对象进行2D空间或3D空间缩放。常与 transform-origin 一起使用。注:参数值为倍数,大于1表示放大;0~1之间为缩小;1表示不变;0的时候元素不可见。参数值为负数时,除了元素的方向发生改变[x轴反转],其他规律与正值一致。
scale(m,n)第一个参数指定X轴的缩放倍数[必须], 第二个参数指定Y轴的缩放倍数[当不设置时, 默认取第一个参数的值]
scaleX()指定X轴的缩放倍数
scaleY()指定Y轴的缩放倍数
scale3D()第一个参数指定X轴的缩放倍数, 第二个参数指定Y轴的缩放倍数, 第三个参数指定Z轴的缩放倍数, 3个参数缺一不可
scaleZ()指定Z轴的缩放倍数
skew对象进行2D空间斜切。常与 transform-origin 一起使用。注:若是在使用斜切时内容正常,则使用伪元素,将斜切背景应用在伪元素上。
skew(x,y)第一个参数对应X轴[必须], 第二个参数对应Y轴[当不设置时, 默认为0]
skewX()指定X轴的斜切
skewY()指定Y轴的斜切

表中常常出现transform-origin属性,transform-origin 属性允许您改变被转换元素的位置,且该属性必须与 transform 属性一同使用。transform-origin: x-axis y-axis z-axis;其中的x-axis y-axis z-axis定义视图被置于 X 轴、Y轴、Z轴的何处。

2.animation(动画)属性实现动画效果
  animation 属性是一个简写属性,用于设置六个动画属性:

属性值作用
name动画名称
duration动画执行时间
timing-function速度曲线
delay动画延迟时间
iteration-count播放次数
direction是否反向播放

animation的使用必须结合@keyframes animation-name使用
  @keyframes move{
    form{ left:0px;} to{ left:200px;}
   }
   在需要动画的元素上面添加动画 div{animation:move 5s infinite;}
   animation可以设定每一帧的样式和时间

  
  
3.transition(过渡)属性实现动画效果
  transition 属性是一个简写属性,用于设置四个过渡属性:

属性值作用
property过渡的属性
duration完成过度效果需要时间
timing-function速度曲线
delay延迟时间

transition定义了动画的属性、时间、速度曲线以及延迟时间 ;通常和hover等事件配合使用,由事件触发。
  
transition和animation比较:
  1. 触发条件不同。transition通常和hover等事件配合使用,由事件触发。animation则立即播放。
  2. 循环。 animation可以设定循环次数。
  3. 精确性。 animation可以设定每一帧的样式和时间。tranistion 只能设定头尾。 animation中可以设置每一帧需要单独变化的样式属性, transition中所有样式属性都要一起变化。
  4. 与javascript的交互。animation与js的交互不是很紧密。transition经常跟JS搭配,让js改动属性,从而触发transition的操作。
  5.极端条件下,animation占用的资源相应的比transition多,所以如果能用transition实现,就尽量用transition来实现,如果追求复杂更自由的动画,就可以用animation。
  6.在transition动画的每一帧中,浏览器都要做下relayout和repaint,然后将位图发送给GPU。之前我们提到了,加载位图到GPU内存中是很慢的。transform属性并不会触发当前元素或附近元素的relayout。浏览器将当前元素视为一个整体,它会缩放、旋转、移动这一整个元素。在使用 aniamtion 的时候这样就可以改变很多属性,像我们改变了 width、height、postion 等等这些改变文档流的属性的时候就会引起,页面的回流和重绘,对性能影响就比较大,但是我们用 transition 的时候一般会结合 tansfrom 来进行旋转和缩放等不会生成新的位图,当然也就不会引起页面的重排了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值