0

所以我有一个专业function,每 2-17 秒触发function一次,但是当我尝试停止它时,clearTimeout()它会继续并完全忽略clearTimeout().

所以这是我的主要功能:

var itemTimer;
var stopTimeout;

function major (){
    var itemTime = Math.floor(Math.random() * 15000) + 2000;
    itemTimer = setTimeout('items()', itemTime);    
    stopTimeout = setTimeout('major()',itemTime);
}

这是我的停止超时功能:

function stopTimer() {
    clearTimeout(itemTimer);
    clearTimeout(stopTimeout);
}

谢谢你的帮忙

4

2 回答 2

1

setTimeout()的呼叫不正确;您正在调用items()and major()。相反,您需要将它们作为要调用的函数传递。

不要将括号传递给参数,也不要将参数用引号引起来。

代替:

itemTimer = setTimeout('items()', itemTime);    
stopTimeout = setTimeout('major()',itemTime);

您正在寻找:

itemTimer = setTimeout(items, itemTime);
stopTimeout = setTimeout(major, itemTime);

希望这可以帮助!:)

于 2017-10-01T23:54:38.893 回答
1

我认为你的超时正在堆积。一旦major被调用一次,变量itemTimer就会stopTimeout重新分配一个新的超时引用。因此将无法清除之前设置的超时。如果是这种情况,它应该很容易解决。只需调用stopTimer中的第一个语句major

function major (){
    stopTimer();
    var itemTime = Math.floor(Math.random() * 15000) + 2000;
    itemTimer = setTimeout('items()', itemTime);    
    stopTimeout = setTimeout('major()',itemTime);
}
于 2017-10-02T00:11:26.723 回答