2017-03-08 11 views
0

setInterval을 초기화 한 전역 변수 sim이 선언되었습니다. progressSim 함수에서 clearTimeout()을 사용했지만 setInterval을 중지하지 않습니다.clearTimeout이 호출 된 후 setInterval이 계속 실행됩니다.

var sim; 
function loop(){ 
    var ctx1 = document.getElementById($(allChild[i]).attr('id')).getContext('2d'); 
    dataPercent = $(allChild[i]).attr('data-percent'); 
    cw = ctx1.canvas.width; 
    ch = ctx1.canvas.height; 
    sim = setInterval(function() { 
     progressSim(ctx1); 
    }, 50); 

    setTimeout(function() { 
     i++;      
     if (i < allChild.length) {    
      loop();    
     }       
    }, 20) 
} 

loop(); 

function progressSim(ctx){ 
    diff = ((al/100) * Math.PI*2*10).toFixed(2); 
    ctx.clearRect(0, 0, cw, ch); 
    ctx.lineWidth = 15; 
    ctx.fillStyle = '#09F'; 
    ctx.strokeStyle = "#09F"; 
    ctx.textAlign = 'center'; 
    ctx.fillText(al+'%', cw*.5, ch*.5+2, cw); 
    ctx.beginPath(); 
    ctx.arc(100, 85, 75, start, diff/10+start, false); 
    ctx.stroke(); 

    if(al >= 30){ 
     clearTimeout(sim); 
    } 
    al++; 
} 

우려 사항이 있으면 알려주십시오. 미리 감사드립니다.

+0

를 루프 함수를 호출하여

또한 여러에게 sim 간격을 만드는 존재하지 않는 시간 제한 sim 나는 사항 clearTimeout 및 위해 clearInterval을 교환 할 생각을 취소하려고하면 적절한 '대응 물'을 사용해야합니다. 그리고 이것을 디버깅하기 위해 지금까지 무엇을 했습니까? 너? 그게 실제로 들어가면 확인해 봤어? – CBroe

+0

글쎄, 당신은'loop'을 여러번 호출하여 여러 setInterval을 시작하고 있지만 가장 최근의 것 (sim이 참조하는 것) 만 지워질 것입니다. – Bergi

답변

0

음, alprogressSim에서 정의되지 않습니다. 어떻게 그것이 >= 30이 될 것이라고 기대합니까?

스크립트 시작 부분에 var al과 비슷한 것을 추가하면 도움이됩니다.

+0

전 세계적으로 선언했습니다. al은 정의되지 않았습니다. –

+0

그런 다음 질문을 [mcve]로 업데이트하십시오. – idmean

0

시도한 clearInterval(sim)? 당신은 그러나 적어도 일관성을 위해 다시 시간 제한에