当循环条件为false时,脚本执行不会停止

时间:2017-09-01 11:54:16

标签: javascript setinterval userscripts

最近我在csgojustice上写了一个用于自动投注的用户脚本。这是:

var delay = 10000
var btBet = document.getElementById("make-bet");
var loop = true
var input=document.createElement("input");
input.type="button";
input.value="Start";
input.onclick = start;
input.setAttribute("style", "font-size:18px;position:absolute;top:120px;right:40px;");
document.body.appendChild(input); 

var input=document.createElement("input");
input.type="button";
input.value="Stop";
input.onclick = stop;
input.setAttribute("style", "font-size:18px;position:absolute;top:120px;right:130px;");
document.body.appendChild(input); 

function start() {
    loop = true;
    roll(); 
}

function roll() {
    if (loop === true) {
        btBet.click();
        refreshIntervalId = setInterval(roll2, delay); }
}

function roll2() { 
    btBet.click();
    clearInterval(refreshIntervalId)'
    roll()
}

function stop() {
loop = false;
}

问题:

当我点击开始按钮时,它开始执行。但是当我单击“停止”按钮时,它仍然会执行。但if (loop === true) loop falserelease APK仍有debug APK,但不会停止。

1 个答案:

答案 0 :(得分:0)

我似乎无法体验您的问题 - 这个脚本对我来说很合适。

但我已经解决了一些问题。

  • 不需要roll2功能。
  • 您可以使用setTimeout代替setInterval,然后您不必每次都清除它
  • 在致电clearTimeout
  • 时,您应该stop

jsFiddle

var delay = 1000;
var btBet = document.getElementById("make-bet");
var loop = true;
var input=document.createElement("input");
input.type="button";
input.value="Start";
input.onclick = start;
input.setAttribute("style", "font-size:18px;position:absolute;top:120px;right:40px;");
document.body.appendChild(input); 

var input=document.createElement("input");
input.type="button";
input.value="Stop";
input.onclick = stop;
input.setAttribute("style", "font-size:18px;position:absolute;top:120px;right:130px;");
document.body.appendChild(input); 

function start() {
    loop = true;
    roll(); 
}

function roll() {
    if (loop === true) {
        console.log("roll");
        refreshIntervalId = setTimeout(roll, delay);
    }
}

function stop() {
    loop = false;
    clearTimeout(refreshIntervalId);
}