zoukankan      html  css  js  c++  java
  • 探究css帧动画setps()用处

    今天,闲来无事去逛论坛,忽然发现了一个有意思的效果,果断上图

    我擦嘞,以前听说过这种插件,但是感觉写个这个干嘛要废那么多事,but,这家伙明显不是用的js啊,打开代码一看

    what??? steps()...这是个什么鬼?

    animation-timing-function是关键帧动画的动画速率函数,这我知道,但是从来没听说过steps()啊,

    上网一搜,steps函数是指定一个阶跃函数,脑子就开始晕了,后面越看越晕,实在不行,直接动手写,这一写问题出来了.

    我原本以为steps()中的第一个参数,是指定关键帧动画一共分几步完成,实际的情况:他妹的每个间隔分几步完成.

    不懂我的意思?没关系,上代码...

    <div class="box">
        <p class="p0"></p>
    </div>
    .box{
        box-sizing: content-box;
        border: 1px solid #000;
        display: inline-block;
        margin: 50px 50px;
        width: 100px;
    }
    .p0{
        width: 0px;
        height: 30px;
        background-color: #f00;
        animation: wid 5s infinite;
        animation-timing-function: steps(3,start);
    }
    @keyframes wid{
        0%{
            width: 0px;
        }
        100%{
            width: 100px;
        }
    }

    初看,没有什么问题,但是现在我们把其中的关键帧动画的设置换一下

    @keyframes wid{
        0%{
            width: 0px;
        }
        60%{
            width: 100px;
        }
        100%{
            width: 0px;
        }
    }

    效果如下图

    这么看来,就能知道,steps()的第一个参数,并不是把关键帧整个动画分成几步来执行,而是,每个阶段都分步执行.知道了这些,接下来就好理解了.

    第二个参数可选,接受 start 和 end 两个值,指定在每个间隔的起点或是终点发生阶跃变化,默认为 end,通俗点来讲:

    step-start在变化过程中,都是以下一帧的显示效果来填充间隔动画,

    step-end与上面相反,都是以上一帧的显示效果来填充间隔动画,

    即2个参数都会选择性的跳过前后部分,start跳过0%,end跳过100%

    讲解部分,就这么多,最关键,最核心的部分就是:timing-function 作用于每两个关键帧之间,而不是整个动画.

    理解了上面内容,我也模仿着写了一些小demo

    demo 1:

    .p0{
        white-space: nowrap;
        overflow: hidden;
        width: 8rem;
        margin: 20px auto;
        animation: wid 10s infinite,typing 1s infinite;
        animation-timing-function: steps(8,end),steps(2,end);
        /*font-family: Consolas, Monaco, monospace;*/
        font-size: 1rem;
        border-right: 1px solid transparent;
    }
    @keyframes wid{
        0%{
            width: 0rem;
        }
        50%{
            width: 8rem;
        }
        100%{
            width: 8rem;
        }
    }
    @keyframes typing{
        0%{
            border-right: 1px solid transparent;
        }
        50%{
            border-right: 1px solid blue;
        }
        100%{
            border-right: 1px solid transparent;
        }
    }
    <p class="p0">一二三四五六七八</p>

    效果如下:

    demo 2:

    .p0{
        margin: 50px 50px;
        width: 90px;
        padding-left: 10px;
        height: 24px;
        border: 1px solid blueviolet;
        background-color: blueviolet;
        color: #fff;
        font-size: 14px;
        line-height: 24px;
        /*text-align: center;*/
    }
    .p0 span{
        vertical-align: bottom;
        overflow: hidden;
        white-space: nowrap;
        width: 14px;
        display: inline-block;
        animation: wid 2s infinite;
        animation-timing-function: steps(4,end);
    }
    @keyframes wid{
        0%{
            width: 0px;
        }
        100%{
            width: 14px;
        }
    }
    <p class="p0">加载中<span></span></p>

    其实,这些结合等宽字体效果更好,但是...

    以后有时间了,再补上.

     (续)

    今天无聊又写了个类似轮播展示效果的demo,注:仅仅是只能展示...

     

    <div class="wrap">
        <ul class="box">
            <li><img src="img/a01.jpg" alt="" /></li>
            <li><img src="img/a02.jpg" alt="" /></li>
            <li><img src="img/a03.jpg" alt="" /></li>
            <li><img src="img/a04.jpg" alt="" /></li>
            <li><img src="img/a05.jpg" alt="" /></li>
        </ul>
        <ul class="dot">
            <li class="it01">1</li>
            <li class="it02">2</li>
            <li class="it03">3</li>
            <li class="it04">4</li>
            <li class="it05">5</li>
        </ul>
    </div>
    .wrap{
        width: 600px;
        height: 350px;
        margin: 50px auto;
        box-sizing: content-box;
        border: 1px solid #f00;
        overflow: hidden;
        position: relative;
    }
    .box{
        width: 500%;
        height: 100%;
        position: absolute;
        left: 0;
        top: 0;
        overflow: hidden;
        animation: lf 10s infinite ease-in-out;
    }
    @keyframes lf{
        from,to,90%{
            left: 0;
        }
        10%,20%{
            left: -100%;
        }
        30%,40%{
            left: -200%;
        }
        50%,60%{
            left: -300%;
        }
        70%,80%{
            left: -400%;
        }
    }
    
    .box li{
        width: 600px;
        height: 350px;
        float: left;
    }
    .box li img{
        width: 100%;
        height: 100%;
    }
    .dot{
        position: absolute;
        bottom: 10px;
        left: 0;
        width: 100%;
        text-align: center;
        height: 30px;
    }
    .dot li{
        display: inline-block;
        width: 30px;
        height: 30px;
        border-radius: 50%;
        text-align: center;
        line-height: 30px;
        background-color: #fff;
        color: #666;
    }
    .it01.it01{
        animation: wf05 10s step-end infinite;
    }
    .it02{
        animation: wf01 10s step-end infinite;
    }
    .it03{
        animation: wf02 10s step-end infinite;
    }
    .it04{
        animation: wf03 10s step-end infinite;
    }
    .it05{
        animation: wf04 10s step-end infinite;
    }
    @keyframes wf01{
        from,0%{
            background-color: #f00;
        }
        20%,to{
            background-color: #fff;
        }
    }
    @keyframes wf02{
        20%{
            background-color: #f00;
        }
        from,40%,to{
            background-color: #fff;
        }
    }
    @keyframes wf03{
        40%{
            background-color: #f00;
        }
        from,60%,to{
            background-color: #fff;
        }
    }
    @keyframes wf04{
        60%{
            background-color: #f00;
        }
        from,80%,to{
            background-color: #fff;
        }
    }
    @keyframes wf05{
        80%{
            background-color: #f00;
        }
        from,60%,to{
            background-color: #fff;
        }
    }
  • 相关阅读:
    C# HTTP系列9 GET与POST示例
    [译]Android Studio 3.6 新特性概览
    mysql error 1290 hy000:The MySQL server is running with the --skip-grant-tables option so it cannot execute this statemen' 解决方案
    mysql error 1130 hy000:Host 'localhost' is not allowed to connect to this mysql server 解决方案
    Windows+Apache2.4.10+PHP7.0+MySQL5.6.21安装
    php版本的选择
    PHP,Mysql根据经纬度计算距离并排序
    windows无法启动MySQL服务 错误1067
    PHP MYSQL 搜索周边坐标,并计算两个点之间的距离
    html5获取用户当前的地理位置,即经纬度。
  • 原文地址:https://www.cnblogs.com/fbzs/p/6555377.html
Copyright © 2011-2022 走看看