动画技巧

如何实现类似gif效果一直循环的css动画

  • 2020.08.24

实际开发场景中,使用gif图片的方式能够快速实现一些动图,但是由于gif的实现在某些设备上可能会产生毛边的效果。针对某一些动画效果实现起来并不复杂(css3动画就能支持)的循环动画,我们也可以通过css的方式来进行实现。

比如说有以下这么一个场景,产品想实现一个每隔10s,动画执行时间为1s的无限循环摇摆动画(css:transform:rotate(30deg))。

/*
* 动画计算属性说明
* 不断执行 时间间隔为3s 每次执行2次
* 之前的动画时长为0.2s 所以总时间为3.2s 0.2s内执行2次 0.2s占总时长的6.25% 0.1s执行一次 占3.125% 
* 0.1s内抖动4次 每次占0.78125%
*/
@basePercent:0.78125;
@percents: @basePercent, @basePercent*2,@basePercent*3, @basePercent*4,@basePercent*5,@basePercent*6,@basePercent*7,@basePercent*8,100;
@fk: '{transform: rotate(0deg);}','{transform: rotate(-10deg);}','{transform: rotate(0deg);}','{transform: rotate(10deg);}','{transform: rotate(0deg);}','{transform: rotate(-10deg);}','{transform: rotate(0deg);}','{transform: rotate(10deg);}','{transform: rotate(0deg);}','{transform: rotate(0deg);})';

.generickeyframe(@name; @framelist; @frameprops){
     @keyframes @name{
        .loop-framelist(@index) when (@index <= length(@framelist)){
        @framepos: extract(@framelist, @index) * 1%;
        @{framepos}{
            @props: extract(@frameprops, @index);
            @props();
        }
        .loop-framelist(@index + 1);
        }
        .loop-framelist(1);
    }
}

.generickeyframe(huangDong; 0, @basePercent, @basePercent*2,@basePercent*3, @basePercent*4,@basePercent*5,@basePercent*6,@basePercent*7,@basePercent*8,100;
    {transform: rotate(0deg);},            
    {transform: rotate(-10deg);},
    {transform: rotate(0deg);},
    {transform: rotate(10deg);},
    {transform: rotate(0deg);},
    {transform: rotate(-10deg);},
    {transform: rotate(0deg);},
    {transform: rotate(10deg);},
    {transform: rotate(0deg);},
    {transform: rotate(0deg);}
);
上次更新时间: 2020-08-24 11:57:00