zoukankan      html  css  js  c++  java
  • 第八十三节,CSS3动画效果

    CSS3动画效果


    学习要点:
    1.动画简介
    2.属性详解
    3.简写和版本

    本章主要探讨HTML5中CSS3的动画效果,可以通过类 Flash那样的关键帧模式控制运行。

    一.动画简介

        CSS3提供了类 Flash关键帧控制的动画效果,通过animation属性实现。

        animation实现动画效果主要由两个部分组成:

        1.通过类 Flash动画中的关键帧声明一个动画;

        2.在animation属性中调用关键帧声明的动画。

        CSS3提供的animation是一个复合属性,它包含了很多子属性。如下表所示:

                     属性                                        说明

          animation-name           用来指定一个关键帧动画的名称,这个动画

                            名必须对应一个@keyframes规则。CSS加

                            载时会应用animation-name指定的动画,

                            从而执行动画。

     

           animation-duration               用来设置动画播放所需的时间

          animation-timing-function         用来设置动画的播放方式

               animation-delay                   用来指定动画的延迟时间

          animation-iteration-count             用来指定动画播放的循环次数

             animation-direction               用来指定动画的播放方向

            animation-play-state              用来控制动画的播放状态

             animation-fill-mode               用来设置动画的时间外属性

                  animation                     以上的简写形式

    除了这9个属性之外,动画效果还有一个重要的属性,就是关键帧属性:@keyframes。它的作用是声明一个动画,然后在animation调用关键帧声明的动画。

           //基本格式,“name”可自定义

           @keyframes name {

                  /*...*/

           }

    二.属性详解
    在讲解动画属性之前,先创建一个基本的样式。

    /*设置元素样式*/
    div{
        width: 200px;
        height: 200px;
        background-color: #ff563a;
        border: 5px solid #1313ff;
    }
    
    <div>
        <p>是一部由北青传媒股份</p>
    </div>

    1.@keyframes先声明一个动画关键帧。

    //基本格式,“name”可自定义

           @keyframes name {

                  /*...*/

           }

    /*设置元素样式*/
    div{
        width: 200px;
        height: 200px;
        background-color: #ff563a;
        border: 5px solid #1313ff;
    }
    /*@keyframes先声明一个动画关键帧。*/
    @keyframes myani {
        0% {
            background-color: #ff3728;
            border: 2px solid #fffa35;
        }
        50% {
            background-color: #fffa35;
            border: 2px solid #1f38ff;
        }
        100% {
            background-color: #1522ff;
            border: 2px solid #30ff3c;
        }
    }
    
    <div>
        <p>是一部由北青传媒股份</p>
    </div>

    2.animation-name 调用@keyframes关键帧动画

               属性值                                  说明

                none                 默认值,没有指定任何动画

                关键帧动画名称             是由@keyframes指定创建的动画名称

    /*设置元素样式*/
    div{
        width: 200px;
        height: 200px;
        background-color: #ff563a;
        border: 5px solid #1313ff;
        /*调用@keyframes关键帧动画*/
        animation-name: myani;
    }
    /*@keyframes先声明一个动画关键帧。*/
    @keyframes myani {
        0% {
            background-color: #ff3728;
            border: 2px solid #fffa35;
            margin-left:0;
        }
        50% {
            background-color: #fffa35;
            border: 2px solid #1f38ff;
            margin-left:50px;
        }
        100% {
            background-color: #1522ff;
            border: 2px solid #30ff3c;
            margin-left:100px;
    
        }
    }
    
    <div>
        <p>是一部由北青传媒股份</p>
    </div>

    以上通过关键帧的方式,这里插入了三个关键帧。0%表示动画开始的地方,50%表示动画进行一半时,100%表示动画结束时


    3.animation-duration设置动画播放的时间

    就是动画用多长时间执行完成

    /*设置元素样式*/
    div{
        width: 200px;
        height: 200px;
        background-color: #ff563a;
        border: 5px solid #1313ff;
        /*调用@keyframes关键帧动画*/
        animation-name: myani;
        /*设置动画播放的时间*/
        animation-duration: 2s;
    }
    /*@keyframes先声明一个动画关键帧。*/
    @keyframes myani {
        0% {
            background-color: #ff3728;
            border: 2px solid #fffa35;
            margin-left:0;
        }
        50% {
            background-color: #fffa35;
            border: 2px solid #1f38ff;
            margin-left:50px;
        }
        100% {
            background-color: #1522ff;
            border: 2px solid #30ff3c;
            margin-left:100px;
    
        }
    }
    
    <div>
        <p>是一部由北青传媒股份</p>
    </div>

    4.animation-timing-function设置缓动 

               属性值                                 说明

                ease                     默认值,元素样式从初始状态过渡到终止状态时速度由

                                   快到慢,逐渐变慢。等同于贝塞尔曲线(0.25,0.1,

                                       0.25, 1.0)

               linear                       元素样式从初始状态过渡到终止状态速度是恒速。等同

                                      于贝塞尔曲线(0.0,0.0, 1.0, 1.0)

             ease-in                      元素样式从初始状态过渡到终止状态时,速度越来越

                                      快,呈一种加速状态。等同于贝塞尔曲线(0.42, 0,

                                          1.0, 1.0)

            ease-out                    元素样式从初始状态过渡到终止状态时,速度越来越

                                  慢,呈一种减速状态。等同于贝塞尔曲线(0,0,0.58,

                                     1.0)

          ease-in-out                     元素样式从初始状态过渡到终止状态时,先加速,再减

                                     速。等同于贝塞尔曲线(0.42,0, 0.58, 1.0)

         cubic-bezier                     自定义三次贝塞尔曲线

    /*设置元素样式*/
    div{
        width: 200px;
        height: 200px;
        background-color: #ff563a;
        border: 5px solid #1313ff;
        /*调用@keyframes关键帧动画*/
        animation-name: myani;
        /*设置动画播放的时间*/
        animation-duration: 2s;
        /*设置缓动*/
        animation-timing-function: linear;
    }
    /*@keyframes先声明一个动画关键帧。*/
    @keyframes myani {
        0% {
            background-color: #ff3728;
            border: 2px solid #fffa35;
            margin-left:0;
        }
        50% {
            background-color: #fffa35;
            border: 2px solid #1f38ff;
            margin-left:50px;
        }
        100% {
            background-color: #1522ff;
            border: 2px solid #30ff3c;
            margin-left:100px;
    
        }
    }
    
    
    <div>
        <p>是一部由北青传媒股份</p>
    </div>

    5.animation-delay 设置延迟时间

    /*设置元素样式*/
    div{
        width: 200px;
        height: 200px;
        background-color: #ff563a;
        border: 5px solid #1313ff;
        /*调用@keyframes关键帧动画*/
        animation-name: myani;
        /*设置动画播放的时间*/
        animation-duration: 2s;
        /*设置缓动*/
        animation-timing-function: linear;
        /*设置延迟时间*/
        animation-delay: 1s;
    }
    /*@keyframes先声明一个动画关键帧。*/
    @keyframes myani {
        0% {
            background-color: #ff3728;
            border: 2px solid #fffa35;
            margin-left:0;
        }
        50% {
            background-color: #fffa35;
            border: 2px solid #1f38ff;
            margin-left:50px;
        }
        100% {
            background-color: #1522ff;
            border: 2px solid #30ff3c;
            margin-left:100px;
    
        }
    }
    
    
    <div>
        <p>是一部由北青传媒股份</p>
    </div>

    6.animation-iteration-count设置循环次数 

            属性值                                      说明

              次数                      默认值为1

            infinite                   表示无限次循环

    /*设置元素样式*/
    div{
        width: 200px;
        height: 200px;
        background-color: #ff563a;
        border: 5px solid #1313ff;
        /*调用@keyframes关键帧动画*/
        animation-name: myani;
        /*设置动画播放的时间*/
        animation-duration: 2s;
        /*设置缓动*/
        animation-timing-function: linear;
        /*设置延迟时间*/
        animation-delay: 1s;
        /*设置循环次数*/
        animation-iteration-count: infinite;
    }
    /*@keyframes先声明一个动画关键帧。*/
    @keyframes myani {
        0% {
            background-color: #ff3728;
            border: 2px solid #fffa35;
            margin-left:0;
        }
        50% {
            background-color: #fffa35;
            border: 2px solid #1f38ff;
            margin-left:50px;
        }
        100% {
            background-color: #1522ff;
            border: 2px solid #30ff3c;
            margin-left:100px;
    
        }
    }
    
    
    <div>
        <p>是一部由北青传媒股份</p>
    </div>

    7.animation-direction 设置缓动方向交替

              属性值                                      说明

             normal                   默认值,每次播放向前

           alternate                     一次向前,一次向后,一次向前,一次向后这样交替

    /*设置元素样式*/
    div{
        width: 200px;
        height: 200px;
        background-color: #ff563a;
        border: 5px solid #1313ff;
        /*调用@keyframes关键帧动画*/
        animation-name: myani;
        /*设置动画播放的时间*/
        animation-duration: 2s;
        /*设置缓动*/
        animation-timing-function: linear;
        /*设置延迟时间*/
        animation-delay: 1s;
        /*设置循环次数*/
        animation-iteration-count: infinite;
        /*设置缓动方向交替*/
        animation-direction: alternate;
    }
    /*@keyframes先声明一个动画关键帧。*/
    @keyframes myani {
        0% {
            background-color: #ff3728;
            border: 2px solid #fffa35;
            margin-left:0;
        }
        50% {
            background-color: #fffa35;
            border: 2px solid #1f38ff;
            margin-left:50px;
        }
        100% {
            background-color: #1522ff;
            border: 2px solid #30ff3c;
            margin-left:100px;
    
        }
    }
    
    
    
    <div>
        <p>是一部由北青传媒股份</p>
    </div>

    8.animation-play-state设置停止播放动画 

    /*设置元素样式*/
    div{
        width: 200px;
        height: 200px;
        background-color: #ff563a;
        border: 5px solid #1313ff;
        /*调用@keyframes关键帧动画*/
        animation-name: myani;
        /*设置动画播放的时间*/
        animation-duration: 2s;
        /*设置缓动*/
        animation-timing-function: linear;
        /*设置延迟时间*/
        animation-delay: 1s;
        /*设置循环次数*/
        animation-iteration-count: infinite;
        /*设置缓动方向交替*/
        animation-direction: alternate;
        /*设置停止播放动画*/
        animation-play-state: paused;
    }
    /*@keyframes先声明一个动画关键帧。*/
    @keyframes myani {
        0% {
            background-color: #ff3728;
            border: 2px solid #fffa35;
            margin-left:0;
        }
        50% {
            background-color: #fffa35;
            border: 2px solid #1f38ff;
            margin-left:50px;
        }
        100% {
            background-color: #1522ff;
            border: 2px solid #30ff3c;
            margin-left:100px;
    
        }
    }
    
    
    
    <div>
        <p>是一部由北青传媒股份</p>
    </div>

    9.animation-fill-mode设置结束后不在返回 

             属性值                                      说明

              none                    默认值,表示按预期进行和结束

           forwards                    动画结束后继续应用最后关键帧位置,即不返回

         backforwards               动画结束后迅速应用起始关键帧位置,即返回

             both                         根据情况产生forwards或backforwards的效果

    //both需要结合,次数和播放方向

    animation-iteration-count: 4;

    animation-direction: alternate;

    /*设置元素样式*/
    div{
        width: 200px;
        height: 200px;
        background-color: #ff563a;
        border: 5px solid #1313ff;
        /*调用@keyframes关键帧动画*/
        animation-name: myani;
        /*设置动画播放的时间*/
        animation-duration: 2s;
        /*设置缓动*/
        animation-timing-function: linear;
        /*设置延迟时间*/
        animation-delay: 1s;
        /*设置循环次数*/
        /*animation-iteration-count: infinite;*/
        /*设置缓动方向交替*/
        animation-direction: alternate;
        /*设置停止播放动画*/
        /*animation-play-state: paused;*/
        animation-fill-mode:forwards;
    }
    /*@keyframes先声明一个动画关键帧。*/
    @keyframes myani {
        0% {
            background-color: #ff3728;
            border: 2px solid #fffa35;
            margin-left:0;
        }
        50% {
            background-color: #fffa35;
            border: 2px solid #1f38ff;
            margin-left:50px;
        }
        100% {
            background-color: #1522ff;
            border: 2px solid #30ff3c;
            margin-left:100px;
    
        }
    }
    
    
    
    <div>
        <p>是一部由北青传媒股份</p>
    </div>

    六.简写和版本
    简写形式完整版
    animation: myani(调用关键帧名称) 1s(设置动画播放的时间) ease(设置缓动) 2(设置延迟时间) alternate(设置循环次数) 0s(设置缓动方向交替) both(设置结束后不在返回);
    animation: myani 1s ease 2 alternate 0s both;

    为了兼容旧版本,需要加上相应的浏览器前缀,版本信息如下表:

                                   Opera       Firefox     Chrome          Safari          IE

            支持需带前缀            15 ~ 29    5~ 15         4 ~ 42              4 ~ 8           无

            支持不带前缀             无            16+            43+                    无            10.0+

    兼容完整版,Opera在这个属性上加入webkit,所以没有-o-

    -webkit-animation:myani 1s ease 2 alternate 0s both; 
    -moz-animation:myani 1s ease 2 alternate 0s both; 
    -ms-animation:myani 1s ease 2 alternate 0s both; 
    transition: all 1s ease 0s;

    @keyframes也需要加上前缀

    @-webkit-keyframes myani {...} 
    @-moz-keyframes myani {...} 
    @-o-keyframes myani {...} 
    @-ms-keyframes myani {...} 
    keyframes myani {...}



  • 相关阅读:
    ios代码大全
    MYSQL数据库之如何在已经建立好表之后重构数据表
    关于cookie在一个页面设置但是在另外一个页面获取不到的原因
    cookie的那点事儿
    关于a标签不能调用js方法的小细节,你注意到了么?
    关于mysql预处理技术的一点小心得
    关于delete使用limit的一些注意事项
    DP1 等分连续1-N个数的划分种数
    Spring 编程式事务和声明式事务管理
    java https client信任所有证书
  • 原文地址:https://www.cnblogs.com/adc8868/p/5986742.html
Copyright © 2011-2022 走看看