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

如何在soulAmount达到10时触发执行目标if语句?

解决soulAmount达到指定值时无法触发判断的问题

你的核心问题是:判断soulAmount == 10的代码仅在页面初始化时执行了一次,而soulAmount是通过点击按钮、自动增长动态变化的,后续数值更新时根本没再触发这个判断。

解决思路很直接:把判断逻辑抽成可复用的函数,然后在所有会修改soulAmount的地方调用这个函数,确保每次数值变化后都检查条件。

修改步骤

  1. 新建一个检查成就的函数,整合所有数值判断逻辑,方便后续扩展:
function checkSoulAchievements() {
    // 检查是否达到10灵魂
    if (soulAmount >= 10) {
        console.log(soulAmount);
        // 可加标记变量防止重复触发,比如:if (!achievement10Unlocked) { ... }
    }
    // 检查100灵魂的成就
    if (soulAmount >= 100) {
        achievement1();
    }
}
  1. 在所有修改soulAmount的函数/回调里调用这个检查函数:
    • 点击获取灵魂的getSoul()函数:
      function getSoul() {
          soulAmount += soulAddition;
          document.querySelector(".souls_amount").innerHTML = soulAmount;
          checkSoulAchievements(); // 新增此行
          return soulAmount;
      }
      
    • 升级功能的upgrade1()函数(放在升级成功的分支里):
      function upgrade1() {
          if (soulAmount >= upgradecost1) {
              sps += 1;
              soulAmount -= upgradecost1;
              document.querySelector(".souls_amount").innerHTML = soulAmount;
              document.querySelector(".sps").innerHTML = sps;
              checkSoulAchievements(); // 新增此行
              return soulAmount;
          } else {
              alert("You do not have enough souls!")
          }
      }
      
    • 自动增长的setInterval回调:
      window.setInterval(function() {
          soulAmount += sps;
          document.querySelector(".souls_amount").innerHTML = soulAmount;
          checkSoulAchievements(); // 新增此行
      }, 1000);
      
  2. 删除页面底部那个仅执行一次的if(soulAmount == 10)代码,逻辑已整合到检查函数中。

额外优化建议

  • 将判断条件从==改为>=,避免数值跳过目标值的情况(比如自动增长一次加3,从9直接到12,会错过==10的判断)
  • 如果要确保成就只触发一次,可添加标记变量:
    let achievement10Unlocked = false;
    // 在检查函数中
    if (soulAmount >= 10 && !achievement10Unlocked) {
        console.log(soulAmount);
        achievement10Unlocked = true;
    }
    

修改后的完整代码

let soulAmount = 0;
let soulAddition = 1;
let grabSps = document.querySelector(".sps").innerHTML;
let sps = parseInt(grabSps);
let upgradecost1 = 10;
// 新增成就标记,防止重复触发
let achievement10Unlocked = false;
let achievement100Unlocked = false;

function getSoul() {
    soulAmount += soulAddition;
    document.querySelector(".souls_amount").innerHTML = soulAmount;
    checkSoulAchievements();
    return soulAmount;
}

function upgrade1() {
    if (soulAmount >= upgradecost1) {
        sps += 1;
        soulAmount -= upgradecost1;
        document.querySelector(".souls_amount").innerHTML = soulAmount;
        document.querySelector(".sps").innerHTML = sps;
        checkSoulAchievements();
        return soulAmount;
    } else {
        alert("You do not have enough souls!")
    }
}

window.setInterval(function() {
    soulAmount += sps;
    document.querySelector(".souls_amount").innerHTML = soulAmount;
    checkSoulAchievements();
}, 1000);

function checkSoulAchievements() {
    // 检查10灵魂的触发逻辑
    if (soulAmount >= 10 && !achievement10Unlocked) {
        console.log(soulAmount);
        achievement10Unlocked = true;
    }
    // 检查100灵魂的成就
    if (soulAmount >= 100 && !achievement100Unlocked) {
        achievement1();
        achievement100Unlocked = true;
    }
}

function achievement1() {
    alert("Achievement Unlocked. You've collected 100 Souls!")
    document.getElementById("collect100").style.display = "block"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 03:53:25