用纯
JS
实现动画效果代码量大,计算复杂.因此现在前端页面的动画效果一般都采用CSS
来实现.
CSS
动画实现简单高效,但是在处理动画,控制动画过程上却缺少一些有效手段.例如我们想在动画效果完成时调用回调函数来处理一些事务,会发现CSS并没有提供直接的方法来让我们使用.
本文主要对
CSS
的动画做一个简单介绍,并说明一下动画的回调效果如何实现。
css动画简介
css动画效果有两种,即过渡和动画.
过渡
当元素从一种样式转变为另一种样式,我们为这种转变添加动画效果,这种效果就称作过渡.
CSS
的过渡是通过 transtion
属性实现的.
transtion
属性必须包含以下两个值:
- 要添加过渡效果的样式属性名
- 过渡效果持续时间
另外还有两个可选的属性值:
- 过渡效果的速度时间曲线函数
- 过渡效果的延迟时间
下面是一个CSS过渡效果的例子:
1 | div{ |
当鼠标移动到div
上时,此div
宽度会增加200px.
我们通过css
为宽度变化添加上了 2s 过渡效果。
动画
在实现比较复杂的动画时,单纯使用过渡已经无法达到目的,可以选择使用CSS
的animation
属性来定义动画效果.
要想使用animation
属性,我们必须先了解一下CSS3
加入的@keyframes
规则.
@keyframes
规则用于创建动画,可以从动画运动状态的帧来定义动画.
如下即@kayframes
定义动画的例子:
1 | @keyframes show |
通过@keyframes
我们可以定义动画从开始到结束的样式变化 .
我们也可以通过定义动画效果的百分比状态来定义动画样式,如下
1 | @keyframes show |
在使用@keyframes
定义了动画效果之后,我们可以通过 animation
来将动画效果绑定到元素,如下:
1 | div:hover{ |
具体效果如下:
动画文字
以上就是CSS动画的简单介绍,另外CSS3还添加了transform
属性,用于2D和3D转换,也被经常用来作为动画使用.
CSS
动画的回调函数
像以上的CSS
动画,如果想使用回调函数来控制动画完成后的事务处理,是比较麻烦的.
延时函数
很多人使用JS
的延时函数 setTimtout()
来解决CSS
动画的回调问题,类似如下的代码:
1 | setTimtout(function(){ |
但是这种方法由于并不是真正意义的回调,会造成以下几个问题:
- 由于动画和延时函数并不一定是同一时间开始,导致函数和动画不同步
- 会造成JS代码和CSS代码相互关联耦合,修改和维护比较麻烦
- 存在多个动画需要回调时会造成代码混乱和臃肿
- 在多个动画效果同时结束时会引起回调函数冲突
因此,不建议使用延时函数作为动画的回调函数.
JS
事件
其实,JS
提供了两个事件,可以完美的解决动画的回调函数问题,那就是 transtionend
和 animationend
,当过渡或动画完成时,即会触发对应的事件.
我们可以通过这两个事件轻松优雅的为动画添加回调函数.
具体用法如下:
transtionend
1 | //myFunction即为动画回调函数 |
animationend
1 | //myFunction即为回调函数 |
我们通过以下这个例子来体验这两个事件的具体使用:
1 | <style> |
效果如下:
JQuery
方法
当然也可以使用Jquery库的动画回调函数,很简单,代码类似如下,
1 | $("#item").animate({height:"200px"}, function() { |
以上就是关于CSS动画回调函数的一些知识,希望对你有帮助.