CSS变换-3.动画

时间:2024-07-17 18:25:50

3.1定义关键帧

CSS使用动画,需要先定义关键帧,第一种语法如下:

@keyframes keyframesName{
    from{
        /*property:value*/
    }
    to{
        /*property:value*/
    }
}

注意:keyframesName是自定义的名称,可以是任意合法的名字。

​ property:value是指元素的属性名和属性值。

第二种语法如下:

@keyframes keyframesName{
    0%{
        /*property:value*/
    }
    20%{
        /*property:value*/
    }
    60%{
        /*property:value*/
    }
    100%{
        /*property:value*/
    }
}

用百分比可以更精细得控制动画,注意第一种写法中也可以夹杂第二写法,如下:

@keyframes keyframesName{
    from{
        /*property:value*/
    }
    20%{
        /*property:value*/
    }
    60%{
        /*property:value*/
    }
    to{
        /*property:value*/
    }
}

3.2 给元素添加动画相关属性

定义关键帧之后,还需要给元素添加相关属性,才能有动画效果,常用属性有:

**animation-name:**给元素指定具体的动画(必要的属性,具体的关键帧,就是前面说的keyframesName)

**animation-duration:**设置动画所需时间,必要属性。

**animation-delay:**动画延迟时间,即元素从多长时间后开始产生动画效果。不是必要属性,默认立即开始。

如下代码示意一个盒子在容器盒子中从左边到右边:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>动画演示</title>
    <style>
        .outer{
            width: 600px;
            height: 100px;
            background-color: gray;
            overflow: hidden;
        }
        .inner{
            height: 50px;
            width: 50px;
            margin-top: 25px;
            background-color: red;
            /* 添加动画 */
            animation-name: move;
            /* 设定动画时长 */
            animation-duration: 5s;
        }
        /* 定义关键帧 */
        @keyframes move{
            from{
            }
            to{
                /* 设定位移 */
                transform: translateX(550px);
            }
        }

    </style>
</head>
<body>
    <div class="outer">
        <div class="inner"></div>
    </div>
</body>
</html>

运行效果如下:


以上便是一个最简单的动画了。

3.3 动画的其他属性

3.3.1 设置动画的类型

animation-timing-function属性可以设置动画的类型,常用值如下:

属性值 含义 效果示意图
**ease ** 平滑动画 —— 默认值
linear 线性过渡
ease-in 慢 → 快
ease-out 快 → 慢
ease-in-out 慢 → 快 → 慢
step-start 等同于 steps(1, start)
step-end steps(1, end)
steps( integer,?) 接受两个参数的步进函数。第一个参数必须为正整数,指定指定函数的步数。第二个参数取值可以是 start 或 end ,指定每一步的值发生变化的时间。 animation-timing-function: steps(10,start);
cubic-bezie ( number, number, number, number) 特定的贝塞尔曲线类型。一共四个参数,第一个和第三个必须为0-1之间的数。在线制作贝赛尔曲线:https://cubic-bezier.com cubic-bezier(.5,2.29,.62,.4);
3.3.2 指定动画播放次数

animation-iteration-count属性指定动画的播放次数,常用值有两个:

  • **number :**动画循环次数
  • infinite : 无限循环
3.3.3 指定动画方向
  • animation-direction属性指定动画方向,常用值如下:
  • **normal : **正常方向 (默认)
  • reverse : 反方向运行
  • alternate : 动画先正常运行再反方向运行,并持续交替运行
  • alternate-reverse : 动画先反运行再正方向运行,并持续交替运行
3.3.4 设置动画之外的状态

animation-fill-mode属性可以设置动画之外的状态,常用值如下:

  • **forwards : **设置对象状态为动画结束时的状态
  • **backwards : **设置对象状态为动画开始时的状态
3.3.5 设置动画的播放状态

animation-play-state属性可以设置动画的播放状态,常用值如下:

  • running : 运动 (默认)
  • **paused : **暂停

3.4 动画复合属性

**animation:**属性用来设置动画复合属性,只设置一个时间表示duration动画持续的时间,设置两个时间分别是duration动画持续时间和delay动画延时时间,其他的属性没有数量和前后顺序要求。

不过,animation-play-state 一般单独使用。