Javascript:如何取消setTimeout函数?

时间:2016-12-27 13:23:19

标签: javascript javascript-events javascript-objects

我正在建立一个恩惠系统,让玩家获得一个随机的恩惠/ buff 30秒,然后它自行移除。我有最初的恩惠,它持续30秒,然后自行移除。我推出了这个名字" Healing Boon"到一个空的player.boons = []数组。

然而,反过来我遇到了困难。让我们说敌人想要" debuff"我的角色,并立即删除恩惠。好吧,因为我的恩惠倒计时持续30秒,它继续工作直到30秒为止,即使我给出去除的外观。 (我仍然保持健康长达30秒)。

我将此归因于setTimeout函数。如果我输入30秒,即使稍后下线(比如说5-10秒之后),也可以setTimeout = 0;,它将在接下来的30秒内继续播放。仅在最初的第二次尝试时setTimeout设置为0.但这不是我想要的。我想要一个系统,它可以完全阻止它的束缚,并移除它给予玩家的任何当前的健康增益。

function applyBoonHealing(){
    var blessedWind = setInterval(function(){
        player.cc.hp += 1;
        dom.setText("healthcounter", player.cc.hp);
    }, 1000);
    player.boons.push("Healing Boon");
    postPlayerStatusEffectImage("images/lowerstrengthicon.jpg", "buff", "0", "2", "no");
    dom.setText("healthcounter", player.cc.hp);

    setTimeout(clearBoon, 30000);
        function clearBoon(){
            clearInterval(blessedWind);
        if (player.boons.includes("Healing Boon", 0)){
            var arrayIndex = player.boons.indexOf("Healing Boon", 0);
            player.boons.splice(arrayIndex, 1);
        }           
            dom.setText("healthcounter", player.cc.hp);
            postPlayerStatusEffectImage("images/lowerstrengthicon.jpg", "buff", "0", "2", "yes");
        }
}

3 个答案:

答案 0 :(得分:3)

clearTimeout()方法是解决这个问题的方法:

var boonHandle = setTimeout(clearBoon, 30000);
(...)
clearTimeout(boonHandle); //To cancel your timer

答案 1 :(得分:0)

您可以使用 clearTimeout()方法,

var mySetTimeoutFunc = setTimeout(clearBoon, 30000);

要停止此操作,您只需clearTimeout(mySetTimeoutFunc);

了解更多信息,请参阅此http://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_win_settimeout_cleartimeout2

答案 2 :(得分:0)

clearTimeout 是一个停止超时的事件,见下文

function myStopFunction() {
    clearTimeout(myVar);
}