Elvis's blogs

使用 CSS3 的 Animation 实现 GIF 动画效果

2023年9月25日 • ☕️ 1 min read

在浏览罗技官网的时候,发现他们通过 CSS 实现了 logo 的动画效果:(鼠标移上暂停动画)

代码:

<div class="main-nav-logo-anim js-main-nav-logo-anim"></div>
<style>
	.main-nav-logo-anim {
        background-image: url(https://resource.logitech.com/w_7.0,f_auto,q_auto/content/dam/logitech/en/nav/logi-logo-anim-light.png);
        background-position: -1px -1276px;
        background-repeat: no-repeat;
        background-size: 120px 1312px;
        animation-name: play-logo-anim;
        animation-fill-mode: forwards;
        animation-duration: 1.2s;
        animation-timing-function: steps(34);
        animation-iteration-count: infinite;
        animation-play-state: running;
        height: 34px;
        width: 120px;
        cursor: pointer;
        margin-bottom: 20px;
    }
    .main-nav-logo-anim:hover {
        animation-play-state: paused;
    }
    @keyframes play-logo-anim {
        0% {
            background-position: -1px -1px
        }
        to {
            background-position: -1px -1276px;
        }
    }
</style>

CSS3 Animation-timing-function Steps

下文源自:掘金 - 抖动的凶鸡

steps() 函数原型为

steps(num_of_steps, direction)

num_of_steps 可以简单理解为整个动画过程要跳几步,要求是一个正整数

Is a strictly positive , representing the amount of equidistant treads composing the stepping function.

direction 按照MDN文档的解释是指定当前步进函数(阶跃函数)为左连续还是右连续函数

Is a keyword indicating if it the function is left- or right-continuous

direction 这个定义,包括MDN文档中关于每个不同取值的图例表示都让我甚是困惑,很难和浏览器中我看到的代码效果联系起来,所以我还是直接通过现象来总结规律吧

第二个参数的所有取值有:

jump-start/start
jump-end/end -- 默认取值
jump-both
jump-none

这里我借用一下网名为“果冻”的大佬的一篇文章中的一个张GIF,以便展示一下各个取值的不同表现:

easingFunc.gif