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

JavaScript降低CSS动画duration后动画未走完全路径的原因是什么

问题根因

你动态修改运行中CSS动画的animation-duration属性时,浏览器不会自动将动画重置到起始状态,会按照新的时长对应当前已播放的进度重新计算位置,最终就会出现红色方块跳步、不从最右侧110vw位置开始移动的问题。同时你代码里没有初始化ourVillanAnimeDuration全局变量,首次修改时长时会出现值为NaN的异常,也是故障诱因之一。

修复方案

你需要在每次调整时长之后强制重启红色方块的动画,修改点如下:

  1. 先在JS代码开头补全变量初始化
  2. 调整时长更新逻辑,修改完时长后手动触发动画重启

1. 补全变量初始化

let ourHeroFig = document.getElementById("ourHero");
let ourVillanFig = document.getElementById("obstacleBar");
let gameScoreDigits = document.getElementById("gameScoreDigits");
let valueXCoordinate = "";
let obstacleBarCrossed = true;
let ourVillanAnimeDuration = 5; // 新增:对应CSS中初始的5s动画时长

2. 修改时长调整逻辑

把原有setInterval里的时长判断代码:

if (ourVillanFigXValue < 10) {
  ourVillanFig.style.animationDuration = ourVillanAnimeDuration - 0.3 + "s";
}

替换为以下代码:

if (ourVillanFigXValue < 10) {
  // 计算新时长,最低限制为2s
  ourVillanAnimeDuration = Math.max(2, ourVillanAnimeDuration - 0.3);
  ourVillanFig.style.animationDuration = ourVillanAnimeDuration + "s";
  // 强制重启动画
  ourVillanFig.classList.remove("animateVillan");
  void ourVillanFig.offsetWidth; // 触发浏览器重绘,避免类名修改被合并不生效
  ourVillanFig.classList.add("animateVillan");
}

修改后每次红色方块走到最左侧时,都会按新的时长从110vw位置重新开始移动,不会再出现路径走不全的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:54:01