CSS3动画方式实现关键帧动画

444 阅读5分钟

真正意义上面了解CSS3动画属性,不需要鼠标参与,直接动画改变执行效果:animation动画,逐帧动画,关键帧动画。

animation基本语法

动画的复合属性、简写

属性:animation

属性值:名字 时间 方式 无限次数


语法案例

animation:name 3s linear 5s infinite alternate
name-------->动画的名字
3s------------>动画执行的时长,.8s,表示0.8秒,0可以省去,0.8秒是人眼反应的最佳时间
linear-------->动画执行的类型
5s------------>动画延迟执行
infinite动画执行的次数==可以使用一个数字代替,不跟数字的话,则代表的是1次; 3就代表了3次; 一直执行;infinite一直运动
alternate反复执行==缓慢开始,缓慢结束


1.动画的名称

属性:animation-name

属性值:设置为创建动画中的自定义名称

animation-name属性必须与规则@keyframes配合使用,因为动画名称是由@keyframes定义声明的,如果提供多个属性值用逗号隔开。

2.动画的运动时间

属性:animation-duration

用于指定执行一个周期动画应该花多长时间。

属性值:时间,以秒或毫秒指定,并且最初设置为“0”,这意味着动画即时发生;我们可以指定一个持续时间或多个以逗号分隔的持续时间。

3.动画的延迟时间

属性:animation-delay

属性值:s ms

如果为animation-delay提供负数“-2S”的值,动画将立即启动,只要它被应用,但它将显示为它已经启动2s之前,你已经应用它。

4.动画的运动方式

属性:animation-timing-function

属性值:linear常用

ease:缓解效果,等同于cubic-bezier(0.25,0.1,0.25,1.0)函数,既立方贝塞尔。

linear:线性效果,速度将从开始到结束稳定。

ease-in:渐显效果,动画将缓慢启动,然后获得更多加速并稳定到持续时间结束。

ease-out:渐隐效果,动画将快速启动,然后减速并稳定到持续时间结束。

ease-in-out:渐显渐隐效果,它是组合了ease-in和ease-out。动画或过渡将开始缓慢,在中间加速,然后减速直至结束。

step-start:马上跳转到动画结束状态,动画或过渡将突然变为结束状态并保持在该位置直到动画结束。

step-end:动画或过渡保持其开始状态,直到动画执行结束,直接跳转到其动画结束状态。

steps([number,[start | end]]):

steps()可以将转换的持续时间划分为相等大小的间隔;或指定输出百分比的变化是发生在间隔的开始还是结束。

第一个参数number为指定的间隔数,即把动画分为n步阶段性显示,第二个参数默认为end,设置最后一步状态,start为结束时的状态,end为开始时的状态,若设置与animation-fill-mode的效果冲突,以animation-fill-mode的设置为动画结束状态。

5.动画的运动次数

属性:animation-iteration-count

属性值:数字1....n,infinite

6.运动方向

属性:animation-direction

属性值:normal顺时针

reverse反向

alternate正反交替

alternate-reverse反正交替

7、animation-fill-mode属性设置动画时间之外的状态

常用取值:

none:默认值,不设置对象动画之外的状态

forwards:设置对象状态为动画结束时的状态,保持 最终状态

backwards:设置对象状态为动画开始时的状态,原位置

both:设置对象状态为动画开始或结束时的状态


动画的创建

1.动画需要创建,就像工具需要购买,需要在css样式中创建

@keyframes  自定义的动画名字{
动画的运动方式}

动画的运动方式有2种,在案例里详细讲解。

-第一种表示单次运动,from....to....

-第二种运动方式表示多次运动:百分比

2.工具需要人去使用,动画也是需要调动

-给元素设置动画属性,哪个元素需要运动就给哪个元素添加

利用CSS3制作的动画片《快乐的小A》

用下面的图片素材,做一个逐帧动画

图片素材

大小为1260*300

动画素材-小A

动画效果

HTML结构

    <div class="box">
        <img src="img/charector.png" alt="">
    </div>

CSS代码

首先是利用通配符,将有默认内外边距的都取消掉,

* {
            margin: 0;
            padding: 0
}

对id名为box的盒子,设置宽高,这里高度取图片的高度300px,宽取图片宽的1260*1/7=180px,可以设置边框作为验证,再调整好位置,上下边距100px,左右居中的位置。设置溢出隐藏。

.box {
            width: 180px;
            height: 300px;
            /* border: 5px solid gray; */
            margin: 100px auto;
            overflow: hidden;
        }

实现方法1:接下来就是动画的使用:完成2个问题即可

第一个:动画的创建

@keyframes change1 {
            0% {}

            100% {
                transform: translateX(-1260px);
            }
        } 

第二个:动画的调用

.box>img {
            animation: change1 0.5s steps(7) infinite;
        }

注意:steps的参数,根据素材来判断,这里用7,下面分别演示steps取值为2,5,7时的效果,体会为啥是7

steps取值为2

动图封面

steps取值为5

动图封面

steps取值为7,达到效果正常

动图封面

结论:所以根据素材数据,steps正确取值才有好的动画效果,这里就是看到小A在欢快的跳跃

实现方法2:接下来就是动画的使用:完成2个问题即可

第一个:动画的创建

@keyframes change2 {
            0% {
                transform: translate(0px);
            }

            14.28% {
                transform: translateX(-180px);
            }

            28.56% {
                transform: translateX(-360px);
            }

            42.84% {
                transform: translateX(-540px);
            }

            57.12% {
                transform: translateX(-720px);
            }

            71.4% {
                transform: translateX(-900px);
            }

            85.68% {
                transform: translateX(-1080px);
            }

            100% {
                transform: translateX(-1260px);
            }
        }

第二个:动画的调用

.box>img {
            animation: change2 0.8s step-end infinite;
        }

这里使用动画运动方式是step-end:动画或过渡保持其开始状态,直到动画执行结束,直接跳转到其动画结束状态。

效果如下

动图封面