2016-10-27 8 views
0

私はこのコード https://gist.github.com/joelambert/1002116に出くわしたと私はループを作成し、要求アニメーションフレームのループ

var tick = 0; 
var dor = requestInterval(function(){ 
    tick++; 
    console.log("hi", tick) 
    if (tick > 10){ 

    stop(); 
    } 
},300) 

function stop(){ 
    console.log("stop") 
    clearRequestInterval(dor); 
} 

それを止めようとした

それで遊んで考えるしかしclearRequestIntervalは、タイマーをクリアされていません。しかし、私はボタンのイベントハンドラから呼び出すようにしようとしました。何か不足していますか?

私はcodepen http://codepen.io/srajagop/pen/KgbbpR

+0

その要点からのコードは、コールバック関数内から間隔をクリアできるようには設計されていません。悲しい、しかしよく。とにかく使ってはいけないと思います。強制停止したい場合は、例外をスローすることができます。 – Bergi

答えて

0

を添付した@Bergiは、使用しようとした例のコードが壊れている、それはインターバル機能自体の中からインターバルタイマーをキャンセルサポートしていないことを右です。あなたは非同期clearRequestIntervalを呼び出すことにより、その回避することができます。

function stop() { 
    console.log("stop"); 
    window.setTimeout(function() { 
    clearRequestInterval(dor); 
    }, 0); 
} 

それとも、より良い、あなたはそれがインターバル関数内からキャンセルされた場合でも、自身のスケジュールを変更していないサンプルコードを修正することができます。

関連する問題