78
myInterval = setInterval(function(){
     MyFunction();
},50);

function MyFunction()
{
    //Can I call clearInterval(myInterval); in here?
}

間隔は停止していません(クリアされていません)。上記でコーディングしたものが問題ない場合は、問題の原因を他の場所で探すのに役立ちます。ありがとう。

編集:clearIntervalが呼び出される前に、setTimeoutの必要性を排除するために、いくつかの間隔が完了すると仮定しましょう。

4

5 に答える 5

141

保存された変数のスコープがある限り、intervalどこからでもキャンセルできます。

「子」スコープの場合:

var myInterval = setInterval(function(){
     clearInterval(myInterval);
},50);

「兄弟」スコープの場合:

var myInterval = setInterval(function(){
     foo();
},50);

var foo = function () {
    clearInterval(myInterval);
};

範囲外になる場合は、間隔を渡すこともできます。

var someScope = function () {
    var myInterval = setInterval(function(){
        foo(myInterval);
    },50);
};

var foo = function (myInterval) {
    clearInterval(myInterval);
};
于 2012-08-23T13:23:23.467 に答える
9
clearInterval(myInterval);

必要なときにいつでもインターバルをキャンセルするトリックを行います。最初の電話の直後にキャンセルしたい場合は、setTimeout代わりに取る必要があります。そして、それをInterval関数自体で呼び出すことができることを確認してください。

var myInterval = setInterval(function() {
  if (/* condition here */){
        clearInterval(myInterval);
   } 
}, 50);

ここの例を参照してください。

于 2012-08-23T13:16:58.960 に答える
3
var interval = setInterval(function() {
  if (condition) clearInterval(interval); // here interval is undefined, but when we call this function it will be defined in this context
}, 50);

または

var callback = function() { if (condition) clearInterval(interval); }; // here interval is undefined, but when we call this function it will be defined in this context
var interval = setInterval(callback, 50);
于 2012-08-23T13:19:46.563 に答える
2

window.setTimeoutでトリックを使用してそれを行うことができます

var Interval = function () {
    if (condition) {
        //do Stuff
    }
    else {
        window.setTimeout(Interval, 20);
    };
};
window.setTimeout(Interval, 20);
于 2014-07-26T11:55:02.240 に答える
1

あなたのコードからあなたがやりたいと思われることは、関数を実行し、いくつかの仕事が完了するまでそれを何度も実行することです...

これは実際にはのタスクでありsetTimeout()、アプローチは似ています。

    var myFunction = function(){
      if( stopCondition ) doSomeStuff(); //(do some stuff and don't run it again)
        else setTimeout( myFunction, 50 );
    }
    myFunction(); //immediate first run 

そのような単純な :)

もちろん、何らかの理由で本当にsetIntervalを使用したい場合は、@jbabeyの答えが最適なようです:)

于 2014-06-29T16:33:05.163 に答える