Transition、Animation动画入门
前言
动画可以说是前端最具表现力的形式
在前端方面可以使用很多技术来展示动画,js,canvas,css,flash
这次分享的主题是前端css动画是 如何实现 的以及他的 实现过程
在引入动画这个概念之前
我们先直接将css的变化写出来
鼠标放在盒子上可查看效果
变大:
变色:
移动:
移动盒子的代码
.box3 {
height:20px;
width:20px;
background: red;
}
.box3:hover {
transform: translateX(100%)
}
可以看到,CSS是没有时间轴的。也就是说,所有的状态变化,都是 瞬间 完成的。
而动画就是让两个图片之间达成一种在时间上的联系
就是对前后变化根据算法来计算出过渡态
所以这里可以引入transition
Transition
Transition的作用在于,指定状态变化所需要的时间。
在下面css中引入transition并指定变化时间1s。
.box {
transition: 1s;
}
变形:
变色:
移动:
移动动画代码
.box3 {
height:20px;
width:20px;
background: red;
transition: 1s;
}
.box3:hover {
transform: translateX(100%)
}
可以看出,transition的作用在于,指定状态变化所需要的时间(transition-duration)。
除此之外,transition还有其他属性:
- transition可以指定变化的属性(transition-property)
- transition可以指定多久后开始变化(transition-delay)
- transition可以指定状态的变化速度(transition-timing-function)。 但是transition也是有局限的:
- transition需要事件触发,所以没法在网页加载时自动发生。
- transition是一次性的,不能重复发生,除非不断触发事件。
- transition只能定义开始状态和结束状态,不能定义中间状态,也就是说只有两个状态。
- 一条transition规则,只能定义一个属性的变化,不能涉及多个属性。
CSS Animation就是为了解决这些问题而提出的。
Animation
首先指定一个动画一个周期持续的时间,以及动画效果的名称
.div:hover {
animation: 3s rainbow;
}
然后定义这个动画,动画一个周期持续的时间,以及动画效果
@keyframes rainbow {
0% { background: #c00; }
50% { background: orange; }
100% { background: yellowgreen; }
}
.spin {
border-radius: 40%;
width: 50px;
height: 50px;
background: red;
animation: demo-spin 1s linear infinite;
}
@keyframes demo-spin {
from { transform: rotate(0deg);}
to { transform: rotate(360deg);}
}
animation除定义动画和动画次数外。
- animation还有其他属性
- animation-fill-mode可以让动画保持在结束状态
- animation-direction可以指定动画轮播方式
个人认为,动画效果除了了解api以外,也需要一些分享和积累
附:加速球动画
下面是一个比较高级的动画效果-加速球,已托管在我的代码仓库中