zoukankan      html  css  js  c++  java
  • HTML5学习之CSS3动画

    动画

    动画(animation)是CSS3中具有颠覆性的特征之一,可以通过设置多个节点来精确控制一个或者一组动画。通常用来实现复杂的动画效果

    相比较过度,动画可以实现更多变化,更多控制,连续自动播放等效果。

    1.1动画的基本使用

    1.先定义动画

    2.在使用(调用)动画

    定义动画

    @keyframes 动画名称 {
            0% {
    
            }
            /* 节点 */
            100% {
    
            }
    }

    动画序列:

    0%是动画的开始 100%是动画的结束。这样的规则就是动画序列

    在@keyframes中规定某项CSS样式 就能创建有当前样式逐渐改变为信阳市的动画效果

    动画是使元素从一种样式逐渐变化为另一种样式的效果.可以改变任意多的样式任意多的次数.

    使用百分比来规定变化发生的时间,或用关键词"from"和"to" 等同于0% 和 100%

    代码示例:

    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>动画</title>
        <style>
            /* 界面一打开 一个盒子就从左边走到右边 */
            /* 定义动画 */
            @keyframes move {
                /* 开始装填 */
                0% {
                    transform: translateX(0px);
                }
                /* 节点 结束状态*/
                100% {
                    transform: translateX(1000px);
                }
            }
            div {
                width: 200px;
                height: 200px;
                background-color: pink;
                /* 调用动画 */
                /* 动画名称 */
                animation-name: move;
                /*  持续时间 */
                animation-duration: 2s ;
            }
            /*  */
        </style>
    </head>
    
    <body>
        <div></div>
    </body>
    
    </html>

    代码示例2:

    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <style>
            /* 可以做多个状态的变化 keyframes 关键帧*/
            /* 里面的百分比要是整数 */
            /* 百分比是总的时间的划分 */
            @keyframes move {
                0% {
                    transform: translate(0, 0);
                }
    
                25% {
                    transform: translate(200px, 0);
                }
    
                50% {
                    transform: translate(200px, 200px);
                }
    
                75% {
                    transform: translate(0, 200px);
                }
    
                100% {
                    transform: translate(0, 0);
                }
            }
    
            div {
                width: 50px;
                height: 50px;
                background-color: pink;
                animation-name: move;
                animation-duration: 3s;
            }
            
        </style>
    </head>
    
    <body>
        <div></div>
    </body>
    
    </html>

    常用属性:

    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>动画属性</title>
        <!-- @keyframes 定义动画 -->
        <!-- animation:所有动画属性的简写属性 除了animation-play-state属性 -->
        <!-- animation-name: 规定@keyframes动画的名称 必须的-->
        <!-- animation-duration 动画时间 默认是0  必须的 -->
        <!-- animation-timing-function 规定动画的速度曲线 默认是ease -->
        <!-- animation-delay 动画延迟时间 过多少时间动画开始 -->
        <!-- animation-iteration-count 规定动画被播放的次数 默认是1 还有infinite -->
        <!-- animation-direction:规定动画是否在下一周期逆向播放 默认是normal altemate
        逆向播放 -->
        <!-- animation-play-state 规定动画是否正在运行或暂停 默认是running 还有pause -->
        <!-- animation-fill-mode  规定动画结束后的状态 保持forwards  回到原来的状态 backwards-->
    
        <style>
            @keyframes move {
                0% {
                    transform: translateX(0, 0);
                }
    
                100% {
                    transform: translate(1000px, 0);
                }
            }
    
            div {
                width: 100px;
                height: 100px;
                background-color: pink;
                /* 动画名称 */
                animation-name: move;
                /* 持续时间 */
                animation-duration: 1s;
                /* 运动曲线 */
                animation-timing-function: linear;
                /* 延迟 */
                animation-delay: 1s;
                /* 动画次数  infinite 无限*/
                /* animation-iteration-count: infinite; */
                /* 是否逆向播放 默认normal alternate 逆向播放 */
                animation-direction: alternate;
                /* 动画播放一次后 是否回到起始状态 backwards回到起始状态 forwards停留在动画结束状态 */
                animation-fill-mode: forwards;
            }
    
            div:hover {
                /* 鼠标经过div 让div暂停动画 鼠标离开就继续动画*/
                animation-play-state: paused;
            }
        </style>
    </head>
    
    <body>
        <div></div>
    </body>
    
    </html>

    动画综合写法:

    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>动画属性</title>
        <!-- @keyframes 定义动画 -->
        <!-- animation:所有动画属性的简写属性 除了animation-play-state属性 -->
        <!-- animation-name: 规定@keyframes动画的名称 必须的-->
        <!-- animation-duration 动画时间 默认是0  必须的 -->
        <!-- animation-timing-function 规定动画的速度曲线 默认是ease -->
        <!-- animation-delay 动画延迟时间 过多少时间动画开始 -->
        <!-- animation-iteration-count 规定动画被播放的次数 默认是1 还有infinite -->
        <!-- animation-direction:规定动画是否在下一周期逆向播放 默认是normal altemate
        逆向播放 -->
        <!-- animation-play-state 规定动画是否正在运行或暂停 默认是running 还有pause -->
        <!-- animation-fill-mode  规定动画结束后的状态 保持forwards  回到原来的状态 backwards-->
    
        <style>
            @keyframes move {
                0% {
                    transform: translateX(0, 0);
                }
    
                100% {
                    transform: translate(1000px, 0);
                }
            }
    
            div {
                width: 100px;
                height: 100px;
                background-color: pink;
                /* 动画名称 */
                /* animation-name: move; */
                /* 持续时间 */
                /* animation-duration: 1s; */
                /* 运动曲线 */
                /* animation-timing-function: linear; */
                /* 延迟 */
                /* animation-delay: 1s; */
                /* 动画次数  infinite 无限*/
                /* animation-iteration-count: infinite; */
                /* 是否逆向播放 默认normal alternate 逆向播放 */
                /* animation-direction: alternate; */
                /* 动画播放一次后 是否回到起始状态 backwards回到起始状态 forwards停留在动画结束状态 */
                /* animation-fill-mode: forwards; */
            }
    
            /* 上面的所有属性等效于 */
            div {
                /* 顺序 动画名称 动画时间 运动轨迹 延迟时间 重复次数 动画是都逆向  动画状态 名字和时间一定不能省略*/
                animation: move 1s linear 1s infinite alternate;
            }
    
            div:hover {
                /* 鼠标经过div 让div暂停动画 鼠标离开就继续动画*/
                animation-play-state: paused;
            }
        </style>
    </head>
    
    <body>
        <div></div>
    </body>
    
    </html>

    动画综合案例:

    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>动画简写</title>
        <style>
            /* 
            animation: 动画名称 持续时间 运动曲线 延迟时间 播放次数 是否反方向
            动画起始或者结束的状态
             */
            body {
                background-color: #333;
            }
    
            .map {
                position: relative;
                margin: 0 auto;
                width: 747px;
                height: 617px;
                background: url(../img/map.png) no-repeat;
            }
    
            .city {
                position: absolute;
                top: 228px;
                right: 193px;
                color: #fff;
            }
    
            .dotted {
                width: 8px;
                height: 8px;
                background-color: #0099ff;
                border-radius: 50%;
            }
    
            div[class^="pulse"] {
                /* 保证小波纹水平垂直居中 放大之后中心向四周发散 */
                position: absolute;
                top: 50%;
                left: 50%;
                transform: translate(-50%, -50%);
                width: 8px;
                height: 8px;
                border-radius: 50%;
                box-shadow: 0 0 6px #009dfd;
                animation: pulse 1.4s linear infinite;
            }
    
            div[class$="2"] {
                animation-delay: 0.4s;
            }
    
            div[class$="3"] {
                animation-delay: 0.8s;
            }
    
            @keyframes pulse {
                0% {}
    
                70% {
                    width: 40px;
                    height: 40px;
                    opacity: 1;
                }
    
                100% {
                    width: 70px;
                    height: 70px;
                    opacity: 0;
                }
            }
        </style>
    </head>
    
    <body>
        <div class="map">
            <div class="city">
                <div class="dotted">
    
                </div>
                <div class="pulse1"></div>
                <div class="pulse2"></div>
                <div class="pulse3"></div>
            </div>
        </div>
    </body>
    
    </html>

    速度曲线细节(animation-timing-function)

    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <style>
            /* animation-timing-function 属性 */
            /* linear 匀速 */
            /* ease 动画低速开始 然后加快 在结束前变慢*/
            /* ease-in 动画低速开始 */
            /* ease-out 动画低速结束 */
            /* ease-in-out  低速开始低速结束*/
            /* steps()  指定了时间函数中的间隔数量(步长) */
            div {
                width: 0;
                font-size: 20px;
                background-color: pink;
                /* 文字一行显示 */
                white-space: nowrap;
                overflow: hidden;
                /* text-overflow: ellipsis; */
                /* 分步长来走  分几步完成动画  分十步 每次走一步*/
                animation: move 2s steps(13) forwards;
            }
    
            @keyframes move {
                0% {
                    width: 0;
                }
    
                100% {
                    width: 250px;
                }
            }
        </style>
    </head>
    
    <body>
        <div>世纪佳缘-程序员的梦想佳地</div>
    </body>
    
    </html>

    动画案例:

    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
        <style>
            body {
                background-color: #ccc;
            }
    
            div {
                position: absolute;
                width: 200px;
                height: 100px;
                background: url(../img/bear.png);
                /* 元素可以添加多个动画 用逗号分隔 */
                animation: bear 1s steps(8) infinite, move 2s linear forwards;
            }
    
            @keyframes move {
                0% {
                    left: 0;
                }
    
                100% {
                    left: 50%;
                    transform: translateX(-50%);
                }
    
            }
    
            @keyframes bear {
                0% {
                    background-position: 0 0;
                }
    
                100% {
                    background-position: -1600px 0;
                }
            }
        </style>
    </head>
    
    <body>
        <div>
    
        </div>
    </body>
    
    </html>
  • 相关阅读:
    获取发布的头条的url,避免点击打开新的页面
    下载图片 保存至本地 返回路径
    线程运行的3个状态
    程序并发执行所需付出的时空开销
    web metrics dashboard 数据分析工具 看板 从可视化发现问题 避免sql重复写 调高效率
    Binary safe
    simple dynamic string
    a
    a
    从业务角度 减少代码执行的时间 和 因长时间执行的而带来的代码复杂性 日志恢复数据
  • 原文地址:https://www.cnblogs.com/huanying2000/p/12209794.html
Copyright © 2011-2022 走看看