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

JavaScript中setTimeout失效问题:Simon游戏按钮闪烁功能异常

Simon游戏按钮闪烁故障排查

以下是几个可能导致闪烁效果失效的关键排查点:

1. 点击事件未绑定到按钮

animatePress函数定义后,如果没有给按钮添加点击触发逻辑,函数永远不会执行。检查是否存在类似的事件绑定代码:

// 假设按钮都带有.btn类,id为red、blue等
$(".btn").click(function() {
  animatePress($(this).attr("id"));
});

若缺少这段代码,点击按钮不会触发闪烁逻辑。

2. "pressed" CSS类未正确定义

闪烁效果完全依赖pressed类的视觉变化,如果CSS中没有定义该类或样式无效,就看不到闪烁。确保CSS中有类似规则:

.pressed {
  box-shadow: 0 0 20px #fff;
  background-color: #ccc;
  /* 也可以用opacity、transform等属性实现视觉变化 */
}

注意类名拼写必须和JS中的"pressed"完全一致,大小写敏感。

3. jQuery未正确引入

代码中使用了jQuery的$("#" + currentColour)选择器,如果页面未引入jQuery库,这段代码会直接报错,导致函数失效。检查HTML头部是否有:

<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>

需确保jQuery在你的JS代码之前引入。

4. 参数与按钮id不匹配

检查调用animatePress时传入的currentColour值,是否和按钮实际id完全一致(比如大小写、拼写错误)。例如按钮id是"Red"但传入的是"red",会导致找不到目标元素。

5. 异步逻辑被干扰

如果有其他代码在100ms内修改同一按钮的类,可能会覆盖setTimeout的效果。可以添加日志验证类的变化:

function animatePress(currentColour) {
  const $btn = $("#" + currentColour);
  console.log("添加前:", $btn.hasClass("pressed"));
  $btn.addClass("pressed");
  console.log("添加后:", $btn.hasClass("pressed"));
  
  setTimeout(function(){
    $btn.removeClass("pressed");
    console.log("移除后:", $btn.hasClass("pressed"));
  },100);
}

打开浏览器控制台,点击按钮查看日志,确认类的添加/移除是否正常执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 15:45:39