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
相关产品推荐
相关产品推荐

