Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何取消设置超时功能?_Javascript_Javascript Objects_Dom Events - Fatal编程技术网

Javascript 如何取消设置超时功能?

Javascript 如何取消设置超时功能?,javascript,javascript-objects,dom-events,Javascript,Javascript Objects,Dom Events,我正在制作一个增益系统,玩家随机获得30秒的增益/增益,然后移除自身。我有一个初始恩惠,它持续30秒,然后自动移除。我将恩惠名称“治疗恩惠”推送到一个空的player.boons=[]数组中 然而,我在另一方面遇到了困难。假设敌人想“削弱”我的角色,并立即消除恩惠。因为我的恩惠的倒计时持续30秒,它会继续工作直到30秒结束,即使我给出移除的外观。(我仍然保持30秒的生命值) 我将此归因于setTimeout函数。如果我输入30秒,即使稍后(比如5-10秒之后),也要使setTimeout=0在接

我正在制作一个增益系统,玩家随机获得30秒的增益/增益,然后移除自身。我有一个初始恩惠,它持续30秒,然后自动移除。我将恩惠名称“治疗恩惠”推送到一个空的
player.boons=[]
数组中

然而,我在另一方面遇到了困难。假设敌人想“削弱”我的角色,并立即消除恩惠。因为我的恩惠的倒计时持续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");
        }
}
clearTimeout()方法是此问题的解决方案:

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

您可以使用clearTimeout()方法

var mySetTimeoutFunc = setTimeout(clearBoon, 30000);
要停止此操作,您只需
clearTimeout(mysettimeoutpunc)


有关更多信息,请参阅此clearTimeout是一个停止超时的事件,请参阅下文

function myStopFunction() {
    clearTimeout(myVar);
}