CSS动画-调速函数-steps
这是我参与8月更文挑战的第28天,活动详情查看:8月更文挑战
在文章CSS动画-调速函数一文中,我们初步了解了一下CSS调速函数animation-timing-function
的作用,介绍了一个重要的调速函数参数cubic-bezier(x1, y1, x2, y2)
,即贝塞尔曲线。在学习animation-timing-function
MDN文档时,发现除了可以取贝塞尔曲线外,还有另外一个函数:steps
,
steps规范
具体规范如下:
1 | steps(number_of_steps, direction) |
其中,number_of_steps
表示一个正整数,表示动画变化的步数/帧数,direction
表示变化函数是否为左连续或右连续。steps(2, jump-start)
的变化曲线如下所示:横轴表示动画的时间进度,竖轴表示动画的执行进度。
通过分析函数曲线,我们可以看到,在(0, 0)时,动画进度发生阶梯跳跃,即此时动画效果是瞬时完成的,相比通过贝塞尔曲线对动画进行平滑过度,什么情况下需要使用steps
函数呢?
在《CSS Secret》中介绍了一种情况:逐帧动画效果
比如下图所示为一个人跳跃的逐帧动画图:
那么,如何通过CSS动画将这一动画演示出来呢?我们来尝试一下。
帧动画
首先来试一下如果使用贝塞尔曲线会是什么样子:
1 |
|
实现效果如下图:
不管是使用linear
或如何调整贝塞尔曲线参数,总是无法达成理想的动画效果。我们来试试如果使用steps
有什么效果:
1 | animation: loader 1s infinite steps(9); |
(嗯,请稍微忽略因截图问题导致的漏出来的一个脚)
可以看到动画效果非常不错了。
至于另外一个参数direction
,我借用另外一篇博客的一个动图,希望能帮助大家理解: