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

JavaScript计时器失效求助:游戏1秒计时设置失败

解决小游戏的1秒计时器与余额随机变动问题

我来帮你搞定这个计时器和余额随机变动的需求!先梳理下你原代码里的几个核心问题,再给你调整好的完整实现:

原代码的问题点

  • 计时器间隔是3秒(setTimeout(update, 3000)),不是你要的1秒
  • update函数里递归调用minebtc()会导致无限叠加调用,数值会失控疯涨
  • stop函数没有实际停止计时器的逻辑
  • 缺少“0到13000之间随机变动+浮动”的核心逻辑

修改后的完整代码

<script>
var satoshi = 0;
var hash = 1;
var timerId = null; // 用来保存计时器ID,方便停止
var floatRange = 500; // 浮动值范围,可自行调整
</script>
<center>
<h4> Hashs Per Second: <script type="text/javascript"> document.write(hash) </script> </h4>
</center>
<center>
<p id="cookiespersecond">Satoshis: 0</p>
</center>
<button onclick="minebtc()"><img src="kop.png" height=28 width=32>Mine BTC</button>
<button onclick="stop()"><img src="kop.png" height=28 width=32>Stop Mining BTC</button>
<script>
function minebtc() {
  // 防止重复启动计时器
  if (timerId) return;
  
  // 启动1秒间隔的计时器
  timerId = setInterval(() => {
    // 生成随机浮动值:-floatRange 到 +floatRange 之间
    const randomFloat = (Math.random() - 0.5) * 2 * floatRange;
    // 更新satoshi,同时限制在0到13000之间
    satoshi = Math.max(0, Math.min(13000, satoshi + randomFloat));
    // 保留整数(如果需要的话,可根据需求调整)
    satoshi = Math.round(satoshi);
    update();
  }, 1000); // 1秒间隔
}

function update() {
  document.getElementById('cookiespersecond').innerHTML = "Satoshis: " + satoshi;
}

function stop() {
  // 清除计时器
  if (timerId) {
    clearInterval(timerId);
    timerId = null;
  }
}
</script>

关键改动说明

  • 1秒计时器实现:用setInterval替代setTimeout,因为它适合需要重复执行的定时任务,设置间隔为1000毫秒(1秒)
  • 随机浮动逻辑:通过(Math.random() - 0.5) * 2 * floatRange生成正负浮动值,你可以调整floatRange变量来控制浮动幅度
  • 数值范围限制:用Math.max(0, Math.min(13000, ...))确保satoshi始终在0到13000之间
  • 防止重复启动:在minebtc里判断timerId是否存在,避免多次点击按钮导致多个计时器同时运行
  • 完善停止功能:stop函数通过clearInterval(timerId)停止计时器,并重置timerId,方便下次重新启动

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:13:53