插件窝 干货文章 CSS动画如何实现元素的非连续性位移和流畅过渡?

CSS动画如何实现元素的非连续性位移和流畅过渡?

translateX 位移 transform 元素 598    来源:    2025-03-19

在CSS中实现元素的非连续性位移和流畅过渡可以通过结合使用@keyframes动画和transition属性来实现。以下是一个示例,展示如何实现元素的非连续性位移并保持过渡的流畅性。

1. 使用 @keyframes 定义非连续性位移

首先,使用 @keyframes 定义元素的非连续性位移。你可以通过设置不同的关键帧来控制元素在不同时间点的位置。

@keyframes discontinuous-movement {
  0% {
    transform: translateX(0);
  }
  25% {
    transform: translateX(100px);
  }
  50% {
    transform: translateX(100px) translateY(100px);
  }
  75% {
    transform: translateX(200px) translateY(100px);
  }
  100% {
    transform: translateX(200px) translateY(0);
  }
}

2. 应用动画到元素

接下来,将定义好的动画应用到元素上,并设置动画的持续时间、延迟、重复次数等属性。

.element {
  width: 100px;
  height: 100px;
  background-color: blue;
  animation: discontinuous-movement 4s ease-in-out infinite;
}

3. 使用 transition 实现流畅过渡

如果你希望在动画的每个阶段之间实现流畅的过渡,可以使用 transition 属性。虽然 @keyframes 本身已经可以控制动画的过渡效果,但 transition 可以在元素的其他属性变化时(如颜色、大小等)提供额外的过渡效果。

.element {
  width: 100px;
  height: 100px;
  background-color: blue;
  animation: discontinuous-movement 4s ease-in-out infinite;
  transition: background-color 0.5s ease-in-out;
}

.element:hover {
  background-color: red;
}

4. 完整示例

以下是一个完整的示例,展示了如何实现非连续性位移和流畅过渡:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>CSS Non-Continuous Movement</title>
  <style>
    @keyframes discontinuous-movement {
      0% {
        transform: translateX(0);
      }
      25% {
        transform: translateX(100px);
      }
      50% {
        transform: translateX(100px) translateY(100px);
      }
      75% {
        transform: translateX(200px) translateY(100px);
      }
      100% {
        transform: translateX(200px) translateY(0);
      }
    }

    .element {
      width: 100px;
      height: 100px;
      background-color: blue;
      animation: discontinuous-movement 4s ease-in-out infinite;
      transition: background-color 0.5s ease-in-out;
    }

    .element:hover {
      background-color: red;
    }
  </style>
</head>
<body>
  <div class="element"></div>
</body>
</html>

解释

  • @keyframes 定义了元素的非连续性位移路径。
  • animation 属性将动画应用到元素上,并设置了动画的持续时间、缓动函数和重复次数。
  • transition 属性用于在元素的其他属性(如背景颜色)发生变化时提供流畅的过渡效果。

通过这种方式,你可以实现元素的非连续性位移,并确保在动画过程中保持流畅的过渡效果。