信息发布→ 登录 注册 退出

如何在 CSS 动画循环之间添加停顿间隔

发布时间:2025-12-26

点击量:

css 的 `animation-delay` 仅控制首次播放前的延迟,无法实现循环迭代间的暂停;要达成“每次动画结束后停顿再重播”的效果,需通过延长动画总时长并合理分配关键帧时间占比来模拟停顿。

在 CSS 动画中,animation-delay 的作用被广泛误解:它只影响动画第一次启动前的等待时间,而非每次循环(iteration)之间的间隔。因此,即使你设置 animation-delay: 1s 并配合 animation-iteration-count: infinite,动画仍会无缝循环——第 1 次结束瞬间立即开始第 2 次,中间不会出现 1 秒停顿。

✅ 正确解法:将“停顿”作为动画周期的一部分
即:把整个动画周期(animation-duration)拆分为「播放段 + 静止段」,并通过关键帧(@keyframes)让元素在末尾保持静止状态一段时间,从而视觉上形成“循环间停顿”。

以你的 .fa-shake 为例,原动画持续 1s,全程都在运动。若希望每次摇晃后暂停 1s,可将总时长设为 2s,并调整关键帧分布:

.fa-shake {
  animation-name: fa-shake;
  animation-duration: 2s; /* 总周期:1s 动画 + 1s 静止 */
  animation-timing-function: linear;
  animation-iteration-count: infinite;
  animation-fill-mode: forwards; /* 确保最后一帧状态保留 */
  width: 150px;
  height: auto;
}

@keyframes fa-shake {
  /* 0%–50%:执行完整摇晃动画(压缩到前 1s)*/
  0%, 5%, 15%, 25%, 35%, 45%, 50% {
    transform: rotate(0deg);
  }
  5.5%, 15.5%, 25.5%, 35.5%, 45.5% {
    transform: rotate(10deg);
  }
  10.5%, 20.5%, 30.5%, 40.5% {
    transform: rotate(-20deg);
  }
  /* 50%–100%:保持静止(后 1s 不动)*/
  50%, 100% {
    transform: rotate(0deg);
  }
}

? 关键要点:

  • 将 animation-duration 设为「运动时长 + 停顿时长」之和;
  • 在关键帧中,用百分比精确划分:前 X% 完成动画,后 (100−X)% 固定在终态(如 rotate(0deg));
  • 推荐添加 animation-fill-mode: forwards,确保动画暂停阶段样式稳定;
  • 避免使用 animation-delay 试图控制循环间隔——它对此无效。

? 进阶提示:若需更灵活控制(如动态停顿、多阶段节奏),可考虑结合 JavaScript 控制 animation-play-state 或使用 @property + transition 实现更精细的时序逻辑,但纯 CSS 方案已能满足绝大多数循环停顿需求。

标签:# css  # javascript  # java  
在线客服
服务热线

服务热线

4008888355

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!