You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何控制CSS @keyframes动画的触发时机?

实现方案

方法1:通过类名控制动画触发(最推荐)

首先修改你的CSS代码,不要把动画属性直接绑定到div的默认样式上,而是把动画定义单独抽成一个专用类:

div {
  width: 100px;
  height: 100px;
  background: red;
  position: relative;
  /* 去掉默认的animation声明,避免页面加载就自动触发 */
}

@keyframes action {
  0%   {top: 0px;}
  25%  {top: 200px;}
  75%  {top: 50px}
  100% {top: 100px;}
}

/* 动画专用类,需要触发时再加到元素上 */
.animation-active {
  animation: action 5s infinite;
}

然后修改你的JavaScript代码,循环逻辑执行完成后,给目标div元素添加上面的专用类即可触发动画:

// 先获取目标元素,也可以用id选择器定位更精准
const targetDiv = document.querySelector('div');

for (var i = 0; i < 10; i++) {
    // 你的业务逻辑
}
// 循环执行完成后添加类,触发动画
targetDiv.classList.add('animation-active');

方法2:动态修改animation属性

如果你不想额外新增类,也可以直接通过JS给元素赋值动画属性:

/* CSS去掉默认animation即可,不需要加额外类 */
div {
  width: 100px;
  height: 100px;
  background: red;
  position: relative;
}

@keyframes action {
  0%   {top: 0px;}
  25%  {top: 200px;}
  75%  {top: 50px}
  100% {top: 100px;}
}

JS代码:

const targetDiv = document.querySelector('div');

for (var i = 0; i < 10; i++) {
    // 你的业务逻辑
}
// 直接给元素设置动画属性触发
targetDiv.style.animation = 'action 5s infinite';

重复触发动画补充说明

如果你需要后续多次触发同一个动画,不能直接重复添加类,需要先移除类、强制浏览器重排后再重新加类:

// 重复触发示例
targetDiv.classList.remove('animation-active');
// 强制浏览器重排,让删除类的操作先生效
void targetDiv.offsetWidth;
targetDiv.classList.add('animation-active');

内容的提问来源于stack exchange,提问作者mm4096

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 07:45:04