CSS3中steps()动画的详解

CSS动画:逐帧动画与steps()函数 steps()函数、雪碧图、精灵动画、帧动画优化。 阅读详情

原文作者:Joni Trythall

增修作者:Fegmaybe

一个是雪碧图的实现动画的steps效果。steps()阶跃函数,是transition-timing-function和animation-timing-function两个属性的属性值,他是表示两个关键帧之间的动画效果,默认是ease。

steps()有两个参数:参数一是把这次过渡分成几段,这几段其实是在时间上分为几段去显示执行。参数二是表示分成几段后,他是start还是end去执行动画。参数二有两个可选值start和end,默认是end。详细见后。

开始先看两个小的案例。

case1:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .hi{
            width: 50px;
            height: 72px;
            background-image: url("http://s.cdpn.io/79/sprite-steps.png");
            /*深度理解
            *整个动画1s完成。
            *这里1s要移动500的像素,这1s要有十步走完,每步是平均下来是0.1s,
            *每步比上一步多走了72px的位置,这个走是瞬间走到的。
            *end表示每一步在接近0.1s再去走
            */
            animation: play 1s steps(10) infinite;
        }
        /*定义动画*/
        @keyframes play {
            from { background-position:    0px 0px; }
            to { background-position: -500px 0px; }
        }
    </style>
</head>
<body>
<img src="http://s.cdpn.io/79/sprite-steps.png" alt="此图片是500*72,主要是为了显示作用">
<div class="hi"></div>

</body>
</html>

效果图:

case2:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        @keyframes typing {
            from { width: 100% }
            to { width:0 }
        }

        @keyframes blink-caret {
            from, to { border-color: transparent }
            50% { border-color: black }
        }

        @-moz-keyframes typing {
            from { width: 100% }
            to { width:0 }
        }

        @-moz-keyframes blink-caret {
            from, to { border-color: transparent }
            50% { border-color: black }
        }

        body { font-family:  monospace; }

        h1 {
            position: relative;
            float: left;
            font-size:150%;
        }

        h1 span {
            position:absolute;
            top:0;
            right:0;
            width:0;
            background: white; /* same as background */
            border-left: .1em solid black;
            box-sizing: border-box;

            -webkit-animation: typing 17s steps(30, end), /* # of steps = # of characters */
            blink-caret 1s step-end infinite;
            -moz-animation: typing 17s steps(30, end), /* # of steps = # of characters */
            blink-caret 1s step-end infinite;
        }
    </style>
</head>
<body>
<h1>HELLO WORLD. Typing animation By Yaiel_lvya.<span> </span></h1>
</body>
</html>

效果:



这些例子很棒,帮助我开始理解这个特别的timming function,但是它们是如此优秀的例子,以至于在demo之外还是难以理解怎样使用steps()。

所以,我仔细研究了steps()并且做了一些动画demos用来帮助理解一些难点。

steps介绍

steps()是一个timing function,允许我们将动画或者过渡分割成段,而不是从一种状态持续到另一种状态的过渡。这个函数有两个参数——第一个参数是一个正值,指定我们希望动画分割的段数。

Steps(<number_of_steps>,<direction>)

第二个参数定义了这个要点 在我们的@keyframes中申明的动作将会发生的关键。这个值是可选的,在没有传递参数时,默认为”end”。方向为”start”表示一个左--持续函数,在动画开始时,动画的第一段将会马上完成。以左侧端点为起点,立即跳到第一个step的结尾处。它会立即跳到第一段的结束并且保持这样的状态直到第一步的持续时间结束。后面的每一帧都将按照此模式来完成动画。

方向为”end”表示一个右--持续函数。动画执行时,在每一帧里,动画保持当前状态直到这一段的持续时间完成,才会跳到下一步的起点,后面的每一帧都按照这个模式来进行,在最后一帧的起点,等到这一帧的持续时间结束,整个动画的执行也已经结束,执行动画的元素来不及跳到这一帧的终点,直接回到了整个动画起点,开始了第二次动画。每个选择本质上从一个不同的面移动这个元素并且将产生一个不同的位置在这个相同的动画里。
这面是示例图:

clipboard.png

动态解析图如下:
图片描述

填充模式和迭代次数的影响

在我们开始前,明白一个不同的填充模式或者迭代次数将会怎样影响steps()是非常重要的,例如”forwards”或者”infinite”的使用。如果我们有两辆车,使用相同的动画持续时间、相同的steps()值,但是其中一个设置迭代的次数(infinite),另一个填充(forward),终点的这两辆汽车看起来非常不同,即使他们从相同的轴点出发。

“forwards”的命令使这个动画元素保持着@keyframes里最后一个动画样式。在动画,里将它与steps()联系使这个动作出现,好像初始的静止状态没有计算到总的步数里。当它是”end”,好像这个车行驶了额外的步数超出了你的steps()的声明,取决于你怎样看待它。

这些讲解听起来还是很散乱,但是我们将在demos里慢慢讲解。(demo地址:http://designmodo.com/demo/st...)现在最重要的事情是留心这些变化将会怎样影响你的意图和steps数。下面是infinite VS forwards车:

clipboard.png

clipboard.png

steps demos

你可以点击这里查看demos,它由以下几个部分组成:

  • 纯css实现的闹钟

  • 一些节能的css车

  • 前进的熊爪印

  • 纯css实现的进度圆

denos的预览:


css闹钟

clipboard.png

一个应用了steps()的闹钟演示。我们需要闹钟的指针旋转起来,但是不是圆滑连续的运动。使用steps()将允许我们模仿真实的闹钟的运动。

这里涉及到了一些数学知识,但是还不是很痛苦。我们需要秒针通过60步完成360度的旋转在60s的时间里。

clipboard.png

分针我们可以应用相同的@keyframes,只有改变动画的执行时间即可。分针转一圈,为3600s,即分针在3600s里,完成60步。

clipboard.png

申明:这只是一个css闹钟,并不能依赖这个闹钟来执行你的日常活动。

css cars

clipboard.png

css车演示了在steps()里使用"end"和"start"的不同。"start"使小车立即移动到一步的结束处并保持当前状态直到这一步的持续时间结束。看起来就好像使用了"start"的车的位置比使用"end"的车的位置更远,但是如果你给这两辆小车添加一个动画的延迟,你可以看到它们是从相同的起点出发的。

"end"会等到每一步的执行时间结束才会开始动画。第一辆车移动的时候,这是它的第二步,所以这两辆车没有机会同步移动。动画里白色的边框是动画当前的起始位置。

clipboard.png

熊脚印

clipboard.png

另一种更好的理解stpes()的方法是创建真实的步数。这个案例我们将会使用熊脚印。这个演示使用了由六个脚印组成的图片。这个图片被一个<div>覆盖,我们要用steps()移动这个<div>来显示出脚印,用来模仿实际的脚印。

没有使用steps()时,<div>将平滑的向右移动,这不是我们想要的效果。我们希望每个脚印可以立即完整的出现。

有六个脚印,我们需要向右移动<div>的长度为图片的整个宽度。

clipboard.png

我们的<div>将向右移动675px在7秒7步的时间里。每一步是96px宽。"end"表示我们的动画将保持它的初始状态,覆盖扬剧有的脚印直到第一步完成。

css进度圆

clipboard.png

在这个演示里我们使用"start"来动态改变不透明度。使用"start"制作一个百分比的可见度的变化。

clipboard.png

clipboard.png

所有的百分数在同一个<div>里,我们将这个<div>通过动画向上移动380px;初始值是"20%",我们需要通过四步移动<div>使数值为40%,60%,80%到最后的100%。

再次强调,使用"forwards"和"infinite"对步数的的作用是不同的。如果我们改变成"infinite",将不会出现"100%",因为"forwards"命令使动画在我们设置的步数外添加了额外的一步。"forwards"使动画保持结束时的状态,所以在步数执行完毕后,动画会跳到最后一帧的状态并保持不变。

结束语

steps() timing function确实难以理解,但是一旦你掌握它了,就会有很多便利。css function 允许我们将动画切割成清楚的步数,或者创建平滑的动画效果。
希望这些demos可以帮助你在动画里更好的理解使用steps()。

纯CSS实现步骤条 步骤条是一种用于引导用户按照特定流程完成任务的导航条,在各种分步表单交互场景中广泛应用。步骤条通常由编号、名称和引导线三个基本要素组成。本文中要实现的是一个简单的步骤条,包含上述三个基本要素。 阅读详情

相关推荐

CSS3动画之animation: steps()

演示一: <div class="img"></div> .img{ width:150px; height: 300px; background: url(./img/img70.png) no-repeat; background-size: 900px; animation: run 1s steps(6) infinite; } @keyframes ...

路漫漫其修远兮,吾将上下而求索。 425

【译】css动画里的steps()用法详解

原文地址:http://designmodo.com/steps-c...原文作者:Joni Trythall 我想你在css 动画里使用steps()会和我一样有很多困惑。一开始我不清楚怎样使用它,于是搜索出了两个案例:typing demo by Lea Verou 和 animated sprite sheet by Simurai...

weixin_33962621的博客 1373

CSS动画中的步进函数:steps()实现帧动画

本文旨在全面介绍CSS动画中的steps()函数,解释其工作原理,展示如何利用它创建各种帧动画效果,并探讨其在实际项目中的应用场景和最佳实践。首先介绍steps()函数的基本概念和工作原理然后深入解析steps()的参数和不同模式接着通过实际代码示例展示应用方法最后探讨高级技巧和实际应用场景steps()函数:CSS timing-function的一种,将动画划分为不连续的步骤而非平滑过渡帧动画:由一系列静态图像快速切换形成的动画效果关键帧:定义动画过程中关键状态的点。

小白菜的博客 765

CSS3动画——steps函数

CSS3动画中应用的定时函数(timing function)常用的有内置关键字linear, ease, ease-in, ease-out, ease-in-out, step-start, step-end,另外还有两个内置的缓动函数cubic-bezier(), steps() 其中steps()这个函数是将整个动画过程分为指定的步数(在动画过程中插值,显示指定位置的快照),并在一个动画循环的时间内按照一定规则走完划分的步数。常用的场景是将多个动画帧组合成连续的动态效果,如下北极熊动画 实现北极熊奔

angry_rooster的博客 4850

纯CSS3 Loading文字动效:三套@keyframes实现与性能避坑

CSS动画与@keyframes是前端实现加载态的基础能力:通过transform、opacity等合成友好属性驱动补间,可在主线程繁忙时保持动画连续,减少JS定时器带来的阻塞、计时漂移与清理负担。对接口等待、按钮提交、后台列表等不确定性加载场景,纯CSS文字Loading能以零依赖方式提供明确的“正在处理”反馈,并兼顾移动端性能与组件化接入。围绕逐字波峰、打字机光标、渐变扫光三套效果,结合animation-delay、steps()、background-clip:text与CSS变量参数化,可让JS特

weixin_33164198的博客 292

STM32F103C8T6最小系统板GPIO配置避坑指南:从原理图到流水灯一次成功

本文详细介绍了STM32F103C8T6最小系统板GPIO配置的实战指南,从硬件准备到流水灯实现,涵盖了九大关键步骤。特别针对新手常见问题,如GPIO配置、开发环境搭建和程序下载调试,提供了详细的解决方案和避坑技巧,帮助开发者快速掌握STM32开发基础。

weixin_33756596的博客 341

CSS3关键帧动画:原理、技巧与性能优化

CSS3关键帧动画是现代前端开发中实现动态效果的核心技术之一,通过@keyframes规则定义动画序列中的关键状态,结合animation属性控制动画的播放行为。其原理是基于时间百分比插值计算中间过渡状态,支持多属性复合变化和3D变换等高级特性。在工程实践中,关键帧动画可显著提升用户界面的交互体验,广泛应用于加载动画、微交互反馈和数据可视化等场景。通过优化技巧如硬件加速、will-change属性和避免重排,可以确保动画流畅运行。本文深入解析关键帧动画的实现机制,并分享性能调优和创意动效开发的一线实战经验。

weixin_29015801的博客 105

XC7Z010-1CLG400C开发板ADC引脚配置全攻略(附完整引脚列表)

本文详细解析了XC7Z010-1CLG400C开发板的ADC引脚配置方法,涵盖XADC模块基础、CLG400封装的引脚布局、硬件设计规范及Vivado工程配置实战。特别提供了完整的引脚列表和性能优化技巧,帮助开发者高效实现模拟信号采集,适用于Zynq-7000系列开发。

weixin_29188043的博客 467

别再只会用linear了!CSS3动画速度曲线全解析:从ease到贝塞尔曲线

本文深入解析了CSS3动画速度曲线,从基础的linear、ease等内置曲线,到强大的cubic-bezier贝塞尔曲线定制,再到实现打字机效果的steps()步进函数。掌握animation-timing-function是提升前端动画专业感的关键,它能赋予动画自然的物理节奏和独特的交互情绪,告别呆板的线性运动。

joy55的博客 279

汽车软件工程师必看:ASPICE流程实战指南(附完整产物清单)

本文为汽车软件工程师提供ASPICE流程实战指南,详细解析如何搭建合规开发环境、各阶段文档产出清单及工具链整合策略。通过实战案例和模板资源,帮助团队高效实施ASPICE标准,提升软件开发质量与效率。

weixin_29230805的博客 472

通信算法之289:数据链/自组网通信设备--MIMO(2T2R)-SFBC-单载波频域均衡(SCFDE)系统系列--实际工程应用算法代码--2.SFBC-SCFDE原理讲解

OFDM传输系统,频谱利用率高,能够有效对抗多径衰落,并且可以通过设置不同的子载波数目来实现非对称数据传输,峰均比比高、易受频偏影响。SCFDE系统峰均比低、且对频偏不敏感。传输速率的增大会使得频率选择性衰落加剧,符号间干扰更加严重。

leegang12的专栏 293

深入css3帧动画实现ps时间轴动画效果steps()(前端网备份)

在应用 CSS3 渐变/动画时,有个控制时间的属性 <timing-function> 。它的取值中除了常用到的 三次贝塞尔曲线 以外,还有个让人比较困惑的 steps() 函数。 steps() 第一个参数 number 为指定的间隔数(必须是正整数),即把动画分为 n 步阶段性展示,第二个参数默认为 end,设置最后一步的状态,start 为结束时的状态,end 为开始时的状态。...

weixin_34008805的博客 505

北斗导航 | ChatGPT之RTK、RTD、ARAIM算法原理及程序代码(ChatGPT看你怎么回答,附部分代码)

ChatGPT之RTK、RTD、ARAIM算法原理及程序代码

尘世冰封的专栏 3679

CSS3 timing-function: steps()介绍

在应用 CSS3 渐变/动画时。有个控制时间的属性 <timing-function>。它的取值中除了经常使用到的三次贝塞尔曲线以外,还有个steps() 函数。 steps 函数指定了一个阶跃函数,第一个參数指定了时间函数中的间隔数量(必须是正整数);第二个參数可选。接受 start 和 end 两个值。指定在每一个间隔的起点或是终点发生阶跃...

aodiyi6351的博客 193

UNet 改进(27):结合SCSE注意力机制的UNet网络实现

本文介绍了一种结合SCSE注意力机制的改进UNet网络架构。该网络在保持UNet经典编码器-解码器结构基础上,通过在每层添加SCSEBlock模块,融合了通道注意力和空间注意力机制。通道注意力通过全局池化和1×1卷积生成通道权重,空间注意力则产生空间权重图,二者相加增强关键特征响应。该设计具有以下优势:1)保持原始UNet的多尺度特征提取能力;2)通过注意力机制提升对重要区域的关注度;3)计算效率高,仅增加少量参数。测试显示网络能保持输入输出分辨率不变,适用于医学图像分割等像素级预测任务。完整代码实现了5层

2401_82355416的博客 415

优快云 付费专栏连载第 3 篇|Cadence Allegro 8 层板布局实战教程:RK3568 硬件模块化分区布局,DDR4 内存约束区域设置、布局禁忌避坑指南

本文是 RK3568 8 层板高速 PCB 设计实战专栏的第 3 篇,聚焦 DDR4 布局阶段的核心方法论与 Allegro 实操。文章从布局前 6 项前置检查清单入手,系统讲解模块化分区布局的五大黄金原则,并给出 160mm×100mm 样板的 5 大功能分区实战案例。随后以图文步骤演示如何在 Allegro 中创建 ROOM_DDR4 与 ROOM_CPU 约束区域,并强调 Hard Room 硬约束的强制校验作用。

weixin_44520581的博客 1734

深入理解CSS3 Animation 帧动画

我们知道CSS3的Animation有八个属性 animation-name animation-duration animation-delay animation-iteration-count animation-direction animation-play-state animation-fill-mode animation-timing-function ...

iteye_20411的博客 155

基于simulink的多能源系统协同与能源互联网的电网系统场景实例:虚拟电厂(VPP)中电网与储能集群的协同控制

本文详细介绍了使用Simulink构建虚拟电厂(VPP)与储能集群协同控制系统的完整建模过程。主要内容包括:1) VPP系统架构设计;2)分步骤建模过程,涵盖虚拟电厂系统创建、储能单元与集群建模、VPP控制器设计(核心)以及协同控制场景仿真;3)性能分析与典型应用场景。通过混合整数线性规划优化调度和智能指令分解策略,实现了VPP参与电力市场交易、电网调频调峰等功能,验证了系统在提升可再生能源消纳率(96%)、降低电网峰谷差(35%)等方面的优异性能。该建模方法为能源互联网中的分布式资源聚合与协同控制提供了实

xiaoheshang_123的博客 476

css3动画中的steps值详解

css3的动画的animation-timing-function属性定义了动画的速度曲线,一般的速度曲线大家都知道,什么ease,linear,ease-in,ease-out,还有自定义贝塞尔曲线...定义了animation-timing-function后,动画就会按照定义的曲线来执行动画. 但是除了这些值以外,animation-timing-function值还可以是steps(...

weixin_33826268的博客 115

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Step of CSS3

这是CSS3属性的一个属性值, 这个值产生了一个新形式的,可以直接跳转的动画,也不要觉得直接跳转着完成比较别扭,这个属性值在实际开发中应用的非常多,step本身比较简单,这篇笔记主要是配合step功能完成一些小的应用。

卷卷小战士的博客 338

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【CSS3】steps() 逐帧动画

使用阶梯函数 steps() 制作逐帧动画。

iuukai 2216

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

CSS3中animation的帧动画steps()

animation的时间函数预设值有:linear ease ease-in ease-out ease-in-out cubic-bezier。 这些线性函数都会自动插入补间动画,以保证动画的连贯性。但是在很多复杂动画里,是无法自动补差的。为了能有良好的效果,我们可以在美术大大的协助下完成一个优美的逐帧动画。 比如这张图: 这个小人的每个动作被均匀的插入一张图片中,一共分了8个动作。为了让小人动...

sayUonly的博客 1579

CSS 动画的 steps()

本文转自:http://web.jobbole.com/83657/ animation默认以ease方式过渡,会以在每个关键帧之间插入补间动画,所以动画效果是连贯性的。ease,linear等之类的过渡函数都会为其插入补间。但有些效果不需要补间,只需要关键帧之间的跳跃,这时应该使用steps过渡方式。本文后面有案例。 steps用法 简单地说,就是原本一个状

ssisse的博客 3760

css steps_使用steps()函数控制CSS3动画

动画是CSS引入的最大功能之一。 过去,网络动画仅在JavaScript或Flash区域中可用。 但是,今天,许多网站都选择使用CSS添加细微的动画 。 在之前的文章中,我们介绍了如何使用CSS动画做一些很酷的事情,例如添加选取框效果和向某些对象添加反弹效果 。 在本文中,我们将再次深入探讨CSS动画。 这次,我们将讨论CSS动画功能, steps() ,它使我们能够控制动画的运动 —不要...

cune1359的博客 777
上一篇: jQuery实现小米购物车功能案例
下一篇: JavaScript数据结构——栈
风或许自媒体
博客等级 码龄12年 76粉丝 35原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值