1. css动画与js动画
css动画:css动画是规则树的改变,在性能上优于js实现的动画,缺点是存在浏览器兼容性问题。
js动画:js通过操作dom元素和对应的样式实现动画,影响到了dom树和规则树,性能消耗较大,但不存在浏览器兼容性问题。
2. css动画的实现方式
css动画常见的实现方式有以下几种:
- transition 实现渐变动画
- transform 转变动画
- animation 实现自定义动画
3. transition(过渡动画)
- transition-property:填写需要变化的css属性,默认为all,具体取值如下:
none 没有属性会获得过渡效果。
all 所有属性都将获得过渡效果。
property 定义应用过渡效果的 CSS 属性名称列表,列表以逗号分隔。 - transition-duration:完成过渡效果需要的时间单位(s或者ms),默认值为0。
- transition-timing-function:过渡效果的速度曲线,默认值为ease,取值如下:
linear 规定以相同速度开始至结束的过渡效果(等于 cubic-bezier(0,0,1,1))。
ease 规定慢速开始,然后变快,然后慢速结束的过渡效果(cubic-bezier(0.25,0.1,0.25,1))。
ease-in 规定以慢速开始的过渡效果(等于 cubic-bezier(0.42,0,1,1))。
ease-out 规定以慢速结束的过渡效果(等于 cubic-bezier(0,0,0.58,1))。
ease-in-out 规定以慢速开始和结束的过渡效果(等于 cubic-bezier(0.42,0,0.58,1))。
cubic-bezier(n,n,n,n) 在 cubic-bezier 函数中定义自己的值。可能的值是 0 至 1 之间的数值。 - transition-delay:动画效果的延迟触发时间,默认值为0。
transition合写形式:
transition: transition-property transition-duration transition-timing-function transition-delay;
4. transform
transform默认的属性值是none,常用的属性值如下:
- translate:位移,写法有:translate(x,y) || translate3D(x,y,z) || translateX(x) || translateY(y) ||translateZ(z)
- scale:缩放,写法有:scale(x[,y]?) || scale3d(x,y,z) || scaleX(x) || scaleY(y) || scaleZ(z)
- rotate:旋转,写法有:rotate(angle) || rotate3d(x,y,z,angle) || rotateX(angle) || rotateY(angle) || rotateZ(angle)
- skew:倾斜,写法有:skew(x-angle,y-angle) || skewX(angle) || skewY(angle)
- perspective:透视,用法:perspective(n)
5. animation
animation可以实现自定义动画,其常见属性如下:
- animation-name:规定@keyframes动画的名称。
- animation-duration:规定动画完成一个周期所花费的秒或毫秒。默认是 0。
- animation-timing-function:规定动画的速度曲线。默认是 “ease”,其取值和过渡的transition-timing-function属性取值一致。
- animation-delay:规定动画何时开始。默认是 0。
- animation-iteration-count:规定动画被播放的次数。默认是 1。
- animation-direction:规定动画是否在下一周期逆向地播放。默认是 “normal”,其取值有:normal、reverse、alternate、alternate-reverse。
- animation-fill-mode:属性规定当动画不播放时(当动画完成时,或当动画有一个延迟未开始播放时),要应用到元素的样式,默认是 none,其取值有:forwards、backwards、both。
animation的合写形式:
animation: animation-name animation-duration [animation-timing-function]? [animation-delay]? [animation-iteration-count]? [animation-direction]?;
xxx.css
// 1. 自定义动画关键帧
@keyframes rotate{
from{
transform: rotate(0deg);
}
to{
transform: rotate(360deg);
}
}
// 2. 使用自定义动画
animation: rotate 2s;