css3 放大 点-【CSS3系列】一篇文章看懂Animation中的时间函数步骤

2023-08-23 0 4,971 百度已收录

概括

摩拜后端团队的zmy

本文将引导您通过几个简单的演示来了解有关动画时间函数中的步骤函数的更多信息。

欢迎留言分享脚步相关动画的疗效,欢迎批评指正。 其他后端干货请关注我公司陌陌公众号——“前端新视野”。

可以借助CSS3动画来创建动画,可以在很多页面中替代Flash、JS等,提高页面加载速度。 众所周知,Animation有8个属性,如下:

属性名称简介

动画名称

指定需要绑定到选择器的关键帧的名称

动画持续时间

完成动画所花费的时间,以秒或微秒为单位

动画计时函数

指定动画的速率曲线

动画延迟

动画开始前有延迟

css3 放大 点-【CSS3系列】一篇文章看懂Animation中的时间函数步骤

动画迭代计数

动漫剧

动画方向

指定动画是否应反向旋转播放

动画播放状态

指定动画是正在运行还是已暂停

动画填充模式

动画未播放时(动画完成或动画延迟)应用于元素的样式

以上8个属性决定了Animation能够实现什么样的动画效果

本文主要介绍timing-function中的steps()函数。 动画在执行动画时默认使用ease函数进行过渡。 Ease会在每个关键帧之间插入补间动画,这样动画的效果是连贯的。

除了ease函数之外,线性、cubic-bezier(贝塞尔曲线)等过渡函数也会为其插入补间动画。

但有时个别效果不需要补间,而只需要在关键帧之间跳转,这时就使用steps()过渡模式。

1.什么是步骤?

steps()是Animation中的一个时序函数,可以实现动画的前馈变化,而不是两个状态之间的线性过渡。

css3 放大 点-【CSS3系列】一篇文章看懂Animation中的时间函数步骤

Steps() 接受两个参数:

步骤(n,[开始|结束])

2、如何使用步骤?

经典的菊花加载治疗效果图大家都看过了,它的实现原理很简单:

静态图像,稍后添加动画:

设置在固定步数内旋转(旋转)360度,以达到加载的效果。 具体实现方法如下:

  1.   class="loading-dot-step" src="./loading.png">



  • ...

  • .loading-dot-step {

  •  animation: loading 1s infinite steps(12,start);

  • }


  • @keyframes loading {

  •  0% {transform: rotate(0deg);}

  •  100% {transform: rotate(360deg);}

  • }

  • 静态图如图所示:

    给里面的静态图片添加动画,steps设置12步,完成两个关键帧之间的运动轨迹,即从当前状态旋转360度,实现下面gif的动画效果。

    不仅有菊花加载的功效,线性加载也很常见。 实现方法是:

    借助timing-function的线性过渡函数,实现了图片的连续旋转。 此时的疗效在视觉上是一个连续的动画,如右图所示:

    css3 放大 点-【CSS3系列】一篇文章看懂Animation中的时间函数步骤

    对于两种加载效果图,第一种是阶梯法,第二种是线性过渡形式。

    两者的实现原理类似:

    两者都将图片从当前状态旋转到两个关键帧之间的 360 度。 当timing-function设置为线性时,状态从0%到100%的变化是均匀的线性变化;

    当动作设置为steps时,整个动画从0度旋转到360度旋转分为12步,每步之间都有跳跃,因此出现了经典的菊花加载效果。

    3.区分开始和结束

    步骤的执行点开始和结束是很多人疑惑的地方。 误用start和end可能会导致动画效果与理想情况不一致。 很多人分不清两者之间的区别。 这里有几个简单的演示来帮助理解这两个属性值之间的区别。

    步骤()可以简化两个关键字step-start和step-end。

     

    1、steps(1, start)

    1. <div class="a box">

  • 2、steps(1, end)

  • <div class="b box">



  • ...

  • .a{

  •  animation:changeColor 4s infinite steps(1, start);

  • }

  • .b{

  •  animation:changeColor 4s infinite steps(1, end);

  • }

  • @keyframes changeColor{

  •  0%{ background-color: red; }

  •  100%{ background-color: blue; }

  • }

  • 上面的代码显示的效果如右图所示:

    1. 步骤(1、开始)

    2.步骤(1、结束)

    从代码中可以看出,两者都是设置一步执行动画来将div的颜色从绿色变为紫色,而我们看到的结果是不一样的。 这是因为start和end属性的执行点不同。 结果差异。

    css3 放大 点-【CSS3系列】一篇文章看懂Animation中的时间函数步骤

    规范文档中给出了steps()的功能图,如右图所示:

    对比steps函数中start和end两个执行点,从上图中步号为1的两张图可以看出:

    同样,当步数等于3时,肉眼可见的start的执行点就是第一步执行结束的位置,end的执行点就是第一步还没有执行完的位置开始了。 因为动画步数相同但起点不同,所以动画的终点也不同。 当设置为start时,终点是动画结束时最后一步的状态,end是上一步的状态。

    为了更直观地展示两者执行起点和终点的区别,本文以纵坐标图的形式展示了执行过程:

    现在我们就可以解释一下上面demo中两个div的颜色不同的原因了。 对于steps属性值为start的a-box,进入屏幕时第一阶段动画已经完成,所以我们不会看到深色css3 放大 点,而是直接显示红色; 对于steps属性值为end的b-box,动画会保持第一帧的状态直到结束,因此始终显示为蓝色。

    4.什么时候使用步骤?

    并不是所有的动画都是连续的,需要采取步骤才能达到个别不连续变化的效果。 比如挂钟钟针的前馈旋转,或者动画中模仿人物或植物的脚印的效果,或者借助Sprite图来移动人物的效果等等。下面是详细介绍人物运动疗效的实现介绍。

    角色运行演示

    1. <div class="person">



  • ...

  • .person {

  •  background: url('person.jpg') no-repeat;

  •  background-size: 800%;

  •  // 动画名称 持续时间 运动曲线(steps()分为几步)循环次数

  •  animation: personBlast .8s steps(7) infinite;

  • }

  • @keyframes personBlast {

  •  0% { background-position: left; }

  •  100% { background-position: right; }

  • }

  • 其中person.jpg为角色动作分割的精灵图:

    本文中的跑步动作实现方法是将原始精灵图像放大图形帧率的倍数,然后将步骤设置为精灵图像的帧率减1(8帧分为7步完成)css3 放大 点,而关键帧动作是从 (from ) 精灵图右侧前馈跳转到 (to) 一侧,最终实现如下运行效果:

    css3 放大 点-【CSS3系列】一篇文章看懂Animation中的时间函数步骤

    【注:跑步的疗效有不同的方法可以达到。 这只是其中之一。 这是为了让您更好地了解步骤的应用场景。 还有其他更友好的方法来实现它。 欢迎与我们交流】

    5.请注意! ! !

    Animation的timing-function有一点需要注意,即:

    timing-function的执行位置是在两个关键帧之间,而不是整个动画

    这里的timing-function指的是本文提到的steps函数以及 Linear、ease、cubic-bezier 等函数。

    这是一个简单的演示来理解这一点。 首先看下面的动画效果:

    实现代码为:

     <div class="test test-a">
    1. <div class="test test-b">



  • ...

  • .test-a {

  •  animation: changeColorOne 1s steps(1) infinite;

  • }

  • .test-b {

  •  animation: changeColorTwo 1s steps(1) infinite;

  • }


  • @keyframes changeColorOne {

  •  0% { background-color: red; }

  •  100% { background-color: blue; }

  • }

  • @keyframes changeColorTwo {

  •  0% { background-color: red; }

  •  25%{ background-color: blue; }

  •  75%{ background-color: red; }

  •  100% { background-color: blue; }


  • 因此:steps并不作用于整个动画,而是在每两个关键帧之间,并且与动画的时长、播放次数等无关,所以整个动画的执行时间依然设置为1s在动画中。

    六,结论

    动画时间函数中的steps()确实比较难理解,一旦掌握,将大大提高我们开发工作的效率,节省大量的调试时间,帮助我们快速定位问题。 希望本文的解释能够帮助您更好地理解和使用steps()。

    感谢您的阅读,欢迎互相交流!

    最后,一个艰难的:

    收藏 (0) 打赏

    感谢您的支持,我会继续努力的!

    打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
    点赞 (0)

    悟空资源网 css3 css3 放大 点-【CSS3系列】一篇文章看懂Animation中的时间函数步骤 https://www.wkzy.net/game/143980.html

    常见问题

    相关文章

    猜你喜欢
    官方客服团队

    为您解决烦忧 - 24小时在线 专业服务