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

来源:我的博客作者:零壳头衔:程序员
导读:本期聚焦于小伙伴创作的《如何在 CSS 动画循环之间添加停顿间隔》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何在 CSS 动画循环之间添加停顿间隔》有用,将其分享出去将是对创作者最好的鼓励。

在CSS动画的实际开发中,我们经常需要实现动画循环播放时中间有停顿间隔的效果,比如轮播图切换后停留几秒再开始下一次切换,或者图标闪烁时亮灭之间有间隔。下面介绍几种常见的实现方式。

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

方法一:调整动画总时长与关键帧分布

这种方法的思路是让动画的总时长等于单次动画播放时长加上停顿时长,然后在关键帧中只让前半段执行动画,后半段保持最终状态,这样循环时就会出现停顿效果。

比如我们要实现一个元素从左到右移动,移动过程持续2秒,停顿1秒后再重复,那么总动画时长就是3秒,关键帧中0%到66.6%(2/3)执行移动,66.6%到100%保持移动后的位置。

/* 定义移动动画 */
@keyframes move {
  0% {
    transform: translateX(0);
  }
  /* 2秒对应总时长3秒的66.6% */
  66.6% {
    transform: translateX(200px);
  }
  100% {
    transform: translateX(200px);
  }
}

/* 应用动画 */
.box {
  width: 50px;
  height: 50px;
  background: #409eff;
  /* 动画总时长3秒,无限循环 */
  animation: move 3s infinite linear;
}

方法二:使用animation-delay配合两次动画

如果需要更灵活的停顿控制,可以把动画拆成两个交替执行的动画,利用animation-delay设置第二个动画的延迟,实现循环间的停顿。

这种方式适合需要不同停顿时长的场景,通过调整延迟时间就能快速修改停顿间隔。

@keyframes move-forward {
  0% {
    transform: translateX(0);
  }
  100% {
    transform: translateX(200px);
  }
}

.box {
  width: 50px;
  height: 50px;
  background: #409eff;
  /* 第一次动画持续2秒,结束后延迟1秒执行第二次动画 */
  animation: move-forward 2s 1s infinite linear;
}

方法三:用animation-play-state控制暂停

还可以通过JavaScript配合animation-play-state属性控制动画的播放和暂停,实现自定义时长的停顿间隔。

这种方式适合需要动态修改停顿时长的场景,不需要重新定义CSS动画。

@keyframes move {
  0% {
    transform: translateX(0);
  }
  100% {
    transform: translateX(200px);
  }
}

.box {
  width: 50px;
  height: 50px;
  background: #409eff;
  animation: move 2s linear infinite;
}

/* 暂停状态的样式 */
.paused {
  animation-play-state: paused;
}
// 获取元素
const box = document.querySelector('.box');
let isPaused = false;

// 每2秒动画播放结束后,暂停1秒
setInterval(() => {
  if (!isPaused) {
    box.classList.add('paused');
    isPaused = true;
    // 1秒后恢复播放
    setTimeout(() => {
      box.classList.remove('paused');
      isPaused = false;
    }, 1000);
  }
}, 2000);

不同方案的对比

我们可以根据需求选择合适的方案,下面是三种方案的适用场景对比:

方案优点缺点适用场景
调整关键帧分布纯CSS实现,无需JS停顿时长修改需要重新计算关键帧比例停顿时长固定,不需要动态修改的场景
animation-delay配合单次动画配置简单,停顿时长调整方便仅适合简单线性动画简单位移、透明度变化等线性动画
animation-play-state配合JS停顿时长可动态修改,灵活度高需要JS代码,增加复杂度需要动态控制停顿时长的场景

注意事项

  • 使用关键帧方案时,要注意总时长的计算,避免关键帧比例错误导致动画效果不符合预期。
  • 如果使用animation-delay的负值,可以实现动画从中间状态开始播放,这个特性可以结合循环停顿实现特殊的动画效果。
  • 当动画有animation-fill-mode: forwards属性时,要注意动画结束后状态的保持是否会影响下一次循环的初始状态。
实际开发中,优先选择纯CSS的实现方案,只有当需要动态修改参数时才考虑引入JavaScript,这样能减少项目的复杂度,提升页面性能。

CSS_animationanimation-delayanimation-iteration-count关键帧动画修改时间:2026-06-18 04:18:34

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。