diff --git a/resources/js/chat-room/fishing.js b/resources/js/chat-room/fishing.js index 174e97c..282f763 100644 --- a/resources/js/chat-room/fishing.js +++ b/resources/js/chat-room/fishing.js @@ -200,34 +200,41 @@ function setFishingButton(text, disabled) { } /** - * 启动自动钓鱼冷却倒计时。 + * 启动自动钓鱼冷却倒计时(基于时间戳,不受浏览器后台节流影响)。 * - * @param {number} cooldown + * @param {number} cooldown 冷却秒数 * @returns {void} */ function startAutoFishingCooldown(cooldown) { - let remaining = cooldown; - setFishingButton(`⏳ 冷却 ${remaining}s`, true); + const endTime = Date.now() + cooldown * 1000; + setFishingButton(`⏳ 冷却 ${cooldown}s`, true); showAutoFishStopButton(cooldown); + // 基于时间戳更新倒计时 UI — 后台节流后回来也能准确显示 autoFishCooldownCountdown = window.setInterval(() => { - remaining -= 1; + const remaining = Math.max(0, Math.ceil((endTime - Date.now()) / 1000)); setFishingButton(`⏳ 冷却 ${remaining}s`, true); if (remaining <= 0) { window.clearInterval(autoFishCooldownCountdown); autoFishCooldownCountdown = null; } - }, 1000); + }, 200); - autoFishCooldownTimer = window.setTimeout(() => { - autoFishCooldownTimer = null; - hideAutoFishStopButton(); - - if (autoFishing) { - void startFishing(); + // 基于时间戳检测冷却结束 — 后台节流后立即触发 + autoFishCooldownTimer = null; + const checkEnd = () => { + if (Date.now() >= endTime) { + autoFishCooldownTimer = null; + hideAutoFishStopButton(); + if (autoFishing) { + void startFishing(); + } + return; } - }, cooldown * 1000); + autoFishCooldownTimer = window.setTimeout(checkEnd, 200); + }; + autoFishCooldownTimer = window.setTimeout(checkEnd, Math.min(cooldown * 1000, 200)); } /**