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

如何使用JavaScript触发已暂停的CSS动画,实现角色死亡时游戏画面渐变灰度

问题诊断

你的代码存在3个核心错误导致动画无法触发:

  • 混淆了@keyframes动画名和DOM元素ID。deathAnimation是你定义的CSS动画名称,不是页面中HTML元素的ID,document.getElementById("deathAnimation")会返回null,后续所有针对该对象的操作均无效。
  • 执行了错误的类添加操作。你已经在CSS规则中提前给#game绑定了deathAnimation动画,不需要额外给game元素添加不存在的类。
  • 动画播放状态的设置对象错误。animation-play-state是绑定在#game元素上的CSS属性,需要直接修改game元素的该属性,而非修改不存在的deathAnimation元素的属性。
修复方案

首先删除JS代码中这两行无效定义:

const deathAnimation = document.getElementById("deathAnimation")
const game = document.getElementById("game")

再将死亡判定分支的代码修改为以下内容:

if (dead == true) {
    clearInterval(gameLoop)
    document.getElementById("youDied").innerHTML = "YOU DIED"
    document.getElementById("playAgain").innerHTML = "Play Again?" 
    // 直接修改game元素的动画播放状态即可触发动画
    document.getElementById("game").style.animationPlayState = "running"
}
可选优化

如果希望灰度效果在动画结束后持续保留,不会自动恢复为彩色,需要给#game的CSS规则新增animation-fill-mode: forwards;属性:

#game {
    width: 600px;
    height: 300px;
    border: 2px solid black;
    margin: auto;
    background-image: url("https://t3.ftcdn.net/jpg/01/73/79/26/360_F_173792623_516juhwjkCCZJ9OyesyH7hf7r9zsyH5u.jpg");
    background-size: cover;
    animation: deathAnimation 2s;
    animation-play-state: paused;
    /* 新增下方属性,让动画停在最后一帧 */
    animation-fill-mode: forwards;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:45:03