【发布时间】:2014-11-02 06:38:07
【问题描述】:
我正在尝试通过递归调用为循环提供暂停和恢复功能。我正在为此使用“setTimeout”和“clearTimeout”函数......
当用户单击“暂停”按钮时,计时器将设置为无限时间(可能的最大值)。当用户单击“恢复”按钮时,应该通过“clearTimeout”调用清除超时。但是永远不会清除超时。我的错误是什么?
提前谢谢你..
HTML:
<button id="loop_controler">pause</button>
JS:
var array = [1,2,3,4,5,6,7];
var pause = false;
var timer;
function execute(array,i){
var pauseTime = 0;
if (pause){
pauseTime = 2147483647; //max value for timeout
}
timer = setTimeout(function(){ //set timer
setTimeout(function () {
alert(array[i]); //this timeout gives a constant delay
if (array.length > i) //(just to give enough time to users to click button)
execute(array,i+1);
}, 1000);
}, pauseTime);
console.log('set ' + timer);
}
$('document').ready(function(){
$('#loop_controler').click(function(){
if ($(this).text() == 'pause'){
pause = true;
$(this).text('resume');
} else {
clearTimeout(timer); //clear timer
console.log('clear ' + timer);
pause = false;
$(this).text('pause');
}
});
execute(array,0);
});
【问题讨论】:
-
为什么不清除用户点击暂停时的超时时间,而不是设置超时时间为无穷大?然后在用户点击 resume 时再次启动。
-
主要问题是清除超时后,您并没有以正常超时重新启动它。
-
你需要
i是一个全局变量,这样你就可以在数组中的当前位置重新启动定时器。 -
查看我今晚早些时候给出的类似答案:stackoverflow.com/questions/26695911/…
-
我误解了 clearTimeout 函数。我以为我们清除超时后会立即执行回调...非常感谢您的帮助..
标签: javascript