zoukankan      html  css  js  c++  java
  • timing-function: steps()

    animation语法

    animation:name duration timing-function delay iteration-count direction

    timing-function取值

    timeing-function: linear / ease / ease-in / ease-out / ease-in-out / cubic-bezier() / steps()

    上面steps()不常用到却有时候非常有用,它是帧动画,其他值都是补间动画(线性动画),有时候一些动画效果必须用它才能实现,例如:今日头条,我们一般用其配合背景的变化制作一些有意思的帧动画。

    steps()

    steps()有两个参数,其中第一个参数是:每个关键帧之间执行次数,取值为正整数,第二个参数是:指定使用每个关键帧的起点或终点,取值为start或end,它有两个简写形式step-start相当于steps(1,start),step-end相当于steps(1,end)。

    使用

    假如上面是一张200 * 800的图片,我想实现在Hover的时候从A变化到A的逐帧动画,可以用以下方法来实现:

    方法一:

    .way1:hover{
        /*在移上去的瞬间变成B,因为start会忽略开始帧*/
        animation: way1 2s steps(3,start);/*ABCDA*/
        animation: way1 2s steps(3,end);/*ABCA,因为end会忽略结束帧*/
    }
    @keyframes way1{
        0%{
            background-position: 0 0;
        }
        /*1/3{
            background-position: 0 -200px;
        }
        2/3{
            background-position: 0 -400px;
        }*/
        100%{
            background-position: 0 -600px;
            /*background-position: 0 100%;*/
        }
    }
    

    方法二:

    .way2:hover{
        /*第一句*/animation: way2 2s steps(4,start);/*ABCDA*/
        /*第二句*/animation: way2 2s steps(4,end);/*ABCDA*/
        /*第三句*/animation: way2 2s steps(4,end) forwards;/*ABCDA*/
    }
    @keyframes way2{
        /*实现一个从A到A的动画,推荐下面这样写,这样就不用纠结用start或end了,但其实用start或end还会有一丁点区别,就是start会立即到下一帧,end则不会*/
        0%{
            background-position: 0 800px; /*A*/
        }
        /*25%{
            background-position: 0 600px; B
        }
        50%{
            background-position: 0 400px; C
        }
        75%{
            background-position: 0 200px; D
        }*/
        100%{
            background-position: 0 0; /*A*/
        }
    }
    /*下面这种写法和@keyframes way2是一样的*/
    @keyframes way3{
        0%{
            background-position: 0 0; /*A*/
        }
        /*25%{
            background-position: 0 -200px; B
        }
        50%{
            background-position: 0 -400px; C
        }
        75%{
            background-position: 0 -600px; D
        }*/
        100%{
            background-position: 0 -800px; /*A*/
        }
    }
    

    上面.way2:hover{}中“第二句”的写法会忽略最后的100%,但一个动画执行完还是会默认回到0%,所以我们看到的还是ABCDA。“第三句”的写法比较有意思,end会忽略100%,forwards又会停在最后一帧,这时候听谁的呢?答案:forwards。虽然“第二句”和“第三句”虽然看到的结果没有任何区别,但实际动画最后一次执行的帧却不同,“第二句”会跳过100%,“第三句”则不会,为了证明这一点看一个颜色变化例子就明白了。

    颜色变化例子

    .test:hover{
        animation: colorChange 2s step-end;/*红绿*/
        animation: colorChange 2s step-end forwards;/*红绿蓝*/
    }
    @keyframes colorChange{
        0%{
            background: red;
        }
        50%{
            background: green;
        }
        100%{
            background: blue;
        }
    }
    

    利用steps()配合设计还可以作出好多有意思小东西,有兴趣可以去发掘。今日头条H5下载倒计时

    以上对steps()的分析都是从经验/测试/自己理解中得出的,非原理上的,所以可能出现不准确,发现望指正,谢谢!

    .shan {
        position: absolute;
        top: 0;
        left: 0;
        overflow: hidden;
         235px;
        height: 235px;
        background-image: url(aaa.png);
        background-repeat: no-repeat;
        transform: translateZ(0);
        animation: change .5s steps(2,end) infinite;
    }
    @keyframes change{
        0%{
            background-position:0 0;
        }
        100%{
            background-position:-470px 0;
        }
    }
    

    使用rem不能精确到数字时,可以用关键字来定位

    .box{
        height: 4.693333rem;
        background: url(./aaa.png) no-repeat left top;
        background-size: 10rem auto;
        animation: change 1.2s step-start infinite;
    }
    @keyframes change{
        50%{
            background-position: left bottom;
        }
    }
  • 相关阅读:
    oracle数据库创建表
    CMD下常用文件操作指令
    C#中int、long、float、double、decimal最大值最小值
    EF框架一对多 多对多关系总结
    如何用vue做网站,如何学习vue?--写两个经典的项目,算是入手
    swiper的使用方法,以及各种JS插件的使用通用技巧
    HTML快速布局技巧!编程的流程控制语句有三种,HTML又如何编写布局呢?
    CSS的移动端适配原理(一)-----屏幕是如何工作的(发光点原理),PC和手机的屏幕是如何渲染图片和文字
    JS语法糖总结----JS语法糖大全----一直更新
    PHPcms 客户定制的连表查询和结果排序的记录----2018-1-29 14:06
  • 原文地址:https://www.cnblogs.com/jiujiaoyangkang/p/5446118.html
Copyright © 2011-2022 走看看