探究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>

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

以后有时间了,再补上.

时间: 2024-12-16 07:54:51

探究css帧动画setps()用处的相关文章

强大的CSS3/JS:帧动画的多种实现方式与性能对比

Web动画形式 首先我们来了解一下Web有哪些动画形式 1\. CSS3动画 Transform(变形) Transition(过渡) Animation(动画) 2\. JS动画(操作DOM.修改CSS属性值) 3\. Canvas动画 4\. SVG动画 5\. 以Three.js为首的3D动画 以上各种动画形式都可以制作出一种类型的动画,那就是帧动画,也叫序列帧动画,定格动画,逐帧动画等,这里我们统一用帧动画来表述. 这里推荐一下我的前端学习交流扣qun:767273102 ,里面都是学习

使用javascript和css模拟帧动画的几种方法浅析

我们平时在开发前端页面的时候,经常会播放一段帧序列.这段帧序列就像gif图片那样,反复循环播放.那大家可能会说,直接用gif图片就好了,干嘛还去模拟呢?那是因为要做得更加灵活,我们要做到以下几点: 1.我们希望这段帧动画只循环播放所指定的次数. 2.我们希望帧动画结束的瞬间执行某种操作.这个在游戏中大量存在. 3.我们想自如的控制播放的速度. 4.我们想尽可能让这个帧动画的实现方式兼容大部分浏览器,在移动和pc端都能运行良好. 有了以上四点要求,那就不是gif图片所能完成的了.下面,我们先探讨有

微信小程序开发之麦克风动画 帧动画 放大 淡出

想做个录音机,第一步就卡在麦克风动画这里了. 先上gif.再吐槽. ① 上面gif中声波的动画是个半成品.没有循环播放.在微信小程序的开发文档上找了很久,也没找到循环模式的参数设置.用setInterval()并不执行动画.我在 微信小程序文档 动画最下面找到这么一行字.这个锅是不是可以甩出去了? ps:如果有同学能实现动画循环,一定告诉我. ② 麦克风里面是个帧动画.没有前端的基础,只能用非主流的办法凑合了. 用wx:if{{}}判断js中定义的值是不是等于图片对应的数字来控制图片的显示和隐藏

css3 实现逐帧动画

实现逐帧动画需要使用到的是Animation动画,该CSS3的Animation有八个属性:分别是如下:1: animation-name2: animation-duration3: animation-delay4: animation-iteration-count5: animation-direction6: animation-play-state7: animation-fill-mode8: animation-timing-function 含义分别如下:animation-n

Android基础入门教程——8.4.1 Android动画合集之帧动画

Android基础入门教程--8.4.1 Android动画合集之帧动画 标签(空格分隔): Android基础入门教程 本节引言: 从本节开始我们来探究Android中的动画,毕竟在APP中添加上一些动画,会让我们的应用变得 很炫,比如最简单的关开Activity,当然自定义控件动画肯定必不可少啦~而Android中的动画 分为三大类,逐帧动画(Frame)以及补间动画(Tween),还有Android 3.0以后引入的属性动画 (Property),而本节给大家带来的是第一种动画--逐帧动画

深入理解CSS3 Animation 帧动画

CSS3我在5年之前就有用了,包括公司项目都一直在很前沿的技术. 最近在写慕课网的七夕主题,用了大量的CSS3动画,但是真的沉淀下来仔细的去深入CSS3动画的各个属性发现还是很深的,这里就写下关于帧动画steps属性的理解 我们知道CSS3的Animation有八个属性 animation-name animation-duration animation-delay animation-iteration-count animation-direction animation-play-sta

深入理解CSS3 Animation 帧动画 ( steps )

作者:Aaron的博客 网址:http://www.cnblogs.com/aaronjs/p/4642015.html -------------------------------------------------------------------------------------------------------------------------------- CSS3我在5年之前就有用了,包括公司项目都一直在很前沿的技术. 最近在写慕课网的七夕主题,用了大量的CSS3动画,但是

移动端帧动画抖动解决方案

概述 今天在做移动端帧动画的时候遇到了抖动的问题,自己查找了一下资料,并且总结出了3个比较好的解决方案,记录下来,供以后开发时参考,相信对其他人也有用. 由于移动端用的是rem布局,所以计算下来总会有一些偏差,这就是抖动的来源. 参考资料:CSS技巧:逐帧动画抖动解决方案 多张图改background-image 挖坑,待填 一张图用scale 挖坑,待填 一张图用svg 挖坑,待填 原文地址:https://www.cnblogs.com/yangzhou33/p/9256507.html

帧动画插件

动画插件封装 最近这段时间一直都在研究关于动画方法的知识,说实话确实不容易,主要还是动画算法这方面比较难,毕竟没学过.当然也有所收获,明白了基本动画的原理是什么,所以自己也封装了一个简单的动画插件来巩固自己所学. 动画插件的实现方式 对于前端来说,主要实现动画的方式就是css(transition , animation),js(setTimeout , setInterval , requestAnimationFrame),canvas,svg等方式,在这里我主要是通过requestAnim