如何停止计时器循环延迟jQuery

问题描述:

我已经做了每10秒延迟的循环。我设定了一个定时器10秒。但它不会停止3循环后....任何想法?我做错了什么? 2循环后,我检查是否它的3d循环我清除间隔,但你可以看到它不能清除? 我做了什么至今:https://jsfiddle.net/56n720qm/2/如何停止计时器循环延迟jQuery

jQuery(document).ready(function() { 

var i = 0; 
var intervaltime; 
var fiveMinutes = 10 * 1; 
var display = document.querySelector('#timer'); 

function startTimer(duration, display) { 
    var timer = duration, minutes, seconds; 
    intervaltime = setInterval(function() { 
     minutes = parseInt(timer/60, 10) 
     seconds = parseInt(timer % 60, 10); 

     minutes = minutes < 10 ? "0" + minutes : minutes; 
     seconds = seconds < 10 ? "0" + seconds : seconds; 

     display.textContent = minutes + ":" + seconds; 

     if (--timer < 0) { 
      timer = duration; 
     } 
    }, 1000); 
} 
function stopINT(){ 
    clearInterval(intervaltime); 
} 
function myLoop() { 
    if(i > 0){time = 10000;}else{time=0;} //every 10 s. 
    setTimeout(function() { 
     //postFB(i); 
     //alert(i); 
     i++; 
     if(i == 3){ 
      stopINT(); 
     } 
     if (i <= 2) { 
      startTimer(fiveMinutes, display); 
      myLoop(); 
     } 
    }, time) 
} 
myLoop(); 
}); 
+0

这是滥用超时通话。你需要简化你的代码,你可能不需要任何循环。你想做什么? – fahadash

你开始不清除的第一个新的区间,所以在一个点上多个间隔在同一时间运行。

在这里添加行clearInterval(intervaltime);来解决你的问题。

if (i <= 2) { 
     clearInterval(intervaltime); 
     startTimer(fiveMinutes, display); 
     myLoop(); 
    } 

查询the fiddle out。

此外,您可能需要考虑将变化时间从10000更改为11000,以防止循环过快完成。

+0

谢谢错过了! :) – andys

+0

没问题,我的荣幸:) – TheOnlyError