移动Web第三天---动画

217 阅读2分钟

动画

过度是可以实现2个状态间变化的过程

  • 动画效果:实现多个转台间的变化过程,动画过程可控(重复播放,最终画面,是否暂停)

动画实现步骤

  1. 定义步骤:
@keyframes 动画名称{
		from {}
		to{}
}

@keyframes 动画名称{
		0%{}
		10%{}
		15%{}
		100%{}
}

2.使用动画

animation:动漫名称 动漫花费时长;   使用在父级盒子上

动画属性

image.png

注意:

  • 动漫名称和动漫时长必须赋值

  • 取值不分先后顺序

  • 如果有2个时间值,第一个时间表示动画时长,第二时间表示延迟时间

    如何使用animation相关属性控制动画执行过程

image.png

使用steps实现逐帧动画

一般照片有多少帧 就填入多少数值

  • 逐帧动画开发中 一般配合精灵图实现动画效果。

  • animation-timing-function:steps(N); 将动画过程分成N等分

  • l 精灵动画制作步骤

    Ø 准备显示区域

    Ø 设置盒子尺寸是一张小图的尺寸,背景图为当前精灵图

    Ø 定义动画

    Ø 改变背景图的位置(移动的距离就是精灵图的宽度)

    Ø 使用动画

    Ø 添加速度曲线steps(N),N与精灵图上小图个数相同

    Ø 添加无限重复效果

  • 多组动画

  • 思考:如果想让小人跑远点,改如何实现?

精灵动画的同时添加盒子位移动画

image.png

image.png

  • 精灵动画制作步骤

Ø 准备显示区域

Ø 设置盒子尺寸是一张小图的尺寸,背景图为当前精灵图

Ø 定义动画

Ø 改变背景图的位置(移动的距离就是精灵图的宽度)

Ø 使用动画

Ø 添加速度曲线steps(N),N与精灵图上小图个数相同

Ø 添加无限重复效果

image.png

思考:如果想让小人跑远一些,该如何实现?

Ø 答:精灵动画的同时添加盒子位移动画

image.png

代码如下:

<style>
        .box{
            width: 1680px;
            height: 140px;
            /* border: 1px solid #000;  */
            
        }
        .box div{
            width: 140px;
            height: 140px;
            background: url(./bg.png);
            /* 多组动画 直接调用 */
            animation: change 3s infinite steps(12),
            run 5s infinite;
        }
        @keyframes change {
            from{
                /* 精灵图移动位置bp */
                /* 逐帧动画 */
               background-position: 0 0;
            }
            to{
                background-position: -1680px 0;
            }
        }
        /* 定义盒子移动动画 */
        @keyframes run {
            from{
                transform: translateX(0);
            }
            to{
                transform:translateX(800px);
            }
        }
       
        /*  */
    </style>

走马灯案例

目标:使用animation实现逐帧图片位移效果

image.png

<style>
        .box{
            width: 1440px;
            height: 270px;
            border: 5px solid #000;
            /* 溢出隐藏 */
            overflow: hidden;
        }
        .box-two{
            width: 4800px;
            height: 270px;
            /* linear 匀速 */
            animation: move 5s  infinite linear;
        }
        @keyframes move {
              /* 加上三张图片的宽度 让其不出现间隔空白 */ 
           to{
               transform: translateX(-3360px);
           }
           
        }
        img{
            float: left;
        }
    </style>
</head>
<body>
    <div class="box">
        <div class="box-two">
            <img src="./1.jpg" alt="">
            <img src="./2.jpg" alt="">
            <img src="./3.jpg" alt="">
            <img src="./4.jpg" alt="">
            <img src="./5.jpg" alt="">
            <img src="./6.jpg" alt="">
            <img src="./7.jpg" alt="">

            <img src="./1.jpg" alt="">
            <img src="./2.jpg" alt="">
            <img src="./3.jpg" alt="">
        </div>
    </div>