CSS3 动画

197 阅读3分钟

动画

定义动画

  1. 定义动画

  2. /* 定义动画 第一种 */
    @keyframes move {
                from {}
                to {}
            }
            
    /* 定义动画 第二种 */        
            @keyframes move2 {
                100% {}
                80% {}
                60% {}
                40% {}
                20% {}
            }
    

使用动画

animation: 动画名称 动画时长 速度曲线 延迟时间 重复次数 动画方向 执行完毕时态;

  1. 定义动画:animation: 定义的动画名称 动画持续的时间;

    animation: move 1s;
    
  2. 动画延迟时间播放: animation-delay: 秒数;

    animation-delay: 1s;  
    
  3. 动画停留状态animation-fill-mode: backwards;

    停留最后一帧的状态
      animation-fill-mode: forwards;
    
    停留第一帧的状态 感觉是默认状态
      animation-fill-mode: backwards;
    
    'both'同时设置了'forwards'和'backwards'
      animation-fill-mode: both;
    
  4. 指定动画播放次数 (animation-iteration-count)

    无数次

    animation-iteration-count: infinite;  
    

    指定次数

    animation-iteration-count: 8;  /* 8次 */
    
  5. 动画方向(animation-direction)

    /* 先正再反 */
    animation-direction: alternate;
    /* 先反再反 */
    animation-direction: reverse;
    /* 先反再正 */
    animation-direction: alternate-reverse;
    
  6. 速度曲线

    animation-timing-function: value;

    animation-timing-function:使用的数学函数,称为三次贝塞尔曲线,速度曲线。使用此函数,您可以使用您自己的值,或使用预先定义的值之一。

    • 跳跃的速度曲线

      transition-timing-function: steps(4);
      
    描述
    liner匀速。动画从头到尾的速度相同
    ease默认。先慢后快.以低速进行,然后加快,结束前又变慢
    ease-in低速开始
    ease-out低速结束
    ease-in-out以低速开始和结束
    steps(int,start|end)指定了时间函数中的间隔数量(步长)。有两个参数,第一个参数指定函数的间隔数,该参数是一个正整数(大于0)。第二个参数是可选的,表示动画是从时间段的开头连续还是末尾连续。start:表示直接开始。end:默认值,表示戛然而止。
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }
        /* 图片宽度 = 1680/12 */
        /* 设置背景图片的位移 (把整个图片都位移过去) 图片位移 1680 steps(12) */
        div {
            width: 140px;
            height: 140px;
            border: 1px solid red;
            background: url(./images/bg.png) no-repeat;
            /* 使用动画 */
            animation: ani 1s steps(12) infinite, ani2 4s linear forwards;
        }
        
        @keyframes ani {
            100% {
                background-position-x: -1680px;
            }
        }
        
        @keyframes ani2 {
            100% {
                transform: translateX(1000px);
            }
        }
        /* 设置背景图片的位移 (把整个图片都位移过去) 图片位移 1680 steps(12) */
    
    • 同一个元素可以设置多个动画,用逗号隔开
    • 图片宽度 = 1680/12
    • 设置背景图片的位移 (把整个图片都位移过去) 图片位移 1680 steps(12) 12步走完
  7. 暂停动画**(animation-play-state)

    animation-play-state: paused;
    

注意

  1. 动画必须要有两个属性:动画的名称 和 动画播放时间

  2. 其他属性看需求 不区分顺序 但播放时间(秒数)一定要写在 延迟时间(秒数)前面

  3. 无缝滚动技巧

    • 两个大盒子

      外层盒子设置宽度和高度

      里层盒子存放多张图片,存放多少张图片 设置宽度为多少

    • 真实存放的图片数量比实际上要多

      多多少 就得看外层盒子能装几张(浮动)

    • 设置动画

      设置内层盒子的位移 等于 真实的那几张图片的位移

      设置动画无限滚动