插件窝 干货文章 CSS动画如何实现元素的非线性跳跃式移动?

CSS动画如何实现元素的非线性跳跃式移动?

动画 跳跃式 元素 animation 29    来源:    2025-03-19

在CSS中,实现元素的非线性跳跃式移动可以通过使用关键帧动画(@keyframes)和animation-timing-function属性来实现。animation-timing-function允许你定义动画的速度曲线,而@keyframes则定义了动画的各个阶段。

要实现非线性跳跃式移动,你可以使用steps()函数作为animation-timing-function的值。steps()函数将动画分成若干步,每一步之间是跳跃式的,而不是平滑过渡的。

以下是一个示例,展示如何实现元素的非线性跳跃式移动:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Non-linear Jumping Animation</title>
    <style>
        .box {
            width: 100px;
            height: 100px;
            background-color: red;
            position: relative;
            animation: jump 2s steps(4, end) infinite;
        }

        @keyframes jump {
            0% {
                left: 0;
            }
            100% {
                left: 400px;
            }
        }
    </style>
</head>
<body>
    <div class="box"></div>
</body>
</html>

解释:

  1. .box:这是你要移动的元素。我们给它设置了宽度、高度、背景颜色,并将其定位为相对定位(position: relative)。

  2. animation: jump 2s steps(4, end) infinite;

    • jump:这是动画的名称,对应@keyframes中的jump动画。
    • 2s:动画的持续时间为2秒。
    • steps(4, end):这是关键部分。steps(4, end)将动画分成4步,每一步之间是跳跃式的。end表示每一步的变化发生在步的末尾。
    • infinite:动画无限循环。
  3. @keyframes jump:定义了动画的关键帧。

    • 0%:动画开始时,元素的位置在left: 0
    • 100%:动画结束时,元素的位置在left: 400px

效果:

在这个例子中,元素会在2秒内从left: 0跳跃式地移动到left: 400px,并且这个动画会无限循环。由于使用了steps(4, end),元素的移动会分成4步,每一步之间是跳跃式的,而不是平滑过渡。

你可以根据需要调整steps()中的步数和动画的持续时间,以达到你想要的效果。