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

JS网页宠物游戏数值异常:点击增加睡眠值直接跳至100求助

问题排查与修复方案

核心问题1:ariaValueNow类型错误

DOM元素的ariaValueNow属性返回的是字符串类型,直接和数字相加会触发字符串拼接而非数值运算。比如当前值是"48",加3会变成"483",这个值远大于100,导致increaseStat直接进入else分支把值设为100。

修复:在获取currentPercent时转为数值类型:

function increaseStat(stat, value) {
  // 转为数值类型
  let currentPercent = Number(stat.ariaValueNow);
  if ((currentPercent + value) <= 100) {
    stat.ariaValueNow = currentPercent + value
  } else {
    stat.ariaValueNow = 100
  }
  // 补充%符号,确保宽度设置正确
  stat.style.width = `${stat.ariaValueNow}%`
}

// dropStat函数同样需要修复类型问题
function dropStat(stat, value) {
  let currentPercent = Number(stat.ariaValueNow)
  if (currentPercent > 0) {
    stat.style.width = `${currentPercent - value}%`
    stat.ariaValueNow = currentPercent - value
  }
}

核心问题2:变量名拼写错误

getSleep函数里调用increaseStat(rest,sleepvalue)时,变量名写成了小写的sleepvalue,但实际定义的是sleepValue(大写V),导致传入undefined。undefined和数值相加结果为NaN,NaN <=100判断为false,进而触发设为100的逻辑。

修复:修正变量名:

function getSleep() {
  const currentEnergyValue = Number(rest.ariaValueNow)
  // 取消注释后需确保变量已定义
  // const sleepQuality = getRandomInRange(0.7,1) * (Number(health.ariaValueNow)/100)  
  const sleepValue = baseSleepIncrease

  // 修正变量名拼写
  increaseStat(rest, sleepValue)
  // 若启用这行需先定义baseHealthIncrease
  // increaseStat(health, (baseHealthIncrease * sleepQuality))
  alert(`current value of sleep:${sleepValue}`)
}

其他潜在问题修复

  1. 随机数函数逻辑错误:getRandomInRange当前返回值会大于max,修正后返回min到max之间的随机数:
function getRandomInRange(min,max) {
  return (Math.random() * (max - min)) + min
}
  1. 未定义变量补充:setInterval中idleHealthDropOff、idleRestDropOff,以及getSleep中baseHealthIncrease需提前声明数值,避免报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 14:58:29