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をクリアしようとしています適切な "相手"を使用する必要があります。これをデバッグするためにこれまで何をしていますか?あなたは?それが実際にそれに入るかどうかチェックされますか? – CBroe

+0

さて、 'loop'を複数回呼び出すことによって複数の' setInterval'を起動していますが、最新のもの( 'sim'参照)のみがクリアされます。 – Bergi

答えて

0

まあ、はprogressSimで定義されていません。 >= 30になるとどう思いますか?

スクリプトの冒頭にvar alのようなものを追加すると役立ちます。

+0

私はそれをグローバルに宣言しました。 alは定義されていません。 –

+0

[mcve]であなたの質問を更新してください。 – idmean

0

試したclearInterval(sim)?あなたは、私がてclearTimeoutとてclearIntervalが交換可能だと思いますが、少なくとも一貫性のために再び

また、あなたがタイムアウトにループ機能を呼び出すことにより、複数sim間隔を作成している

関連する問題