myInterval = setInterval(function(){
MyFunction();
},50);
function MyFunction()
{
//Can I call clearInterval(myInterval); in here?
}
間隔が止まらない(クリアされない)ので、上でコーディングしたもので問題なければ、他の場所で問題の原因を調べるのに役立ちます。ありがとう。
編集:それは、setTimeoutの必要性を削除するclearIntervalが呼び出される前に、いくつかの間隔を完了すると仮定しましょう。
保存された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);
};
clearInterval(myInterval);
必要なときに間隔をキャンセルするトリックを実行します。最初の呼び出しの直後にキャンセルする場合は、代わりにsetTimeout
を使用する必要があります。そして、必ずInterval関数自体で呼び出すことができます。
var myInterval = setInterval(function() {
if (/* condition here */){
clearInterval(myInterval);
}
}, 50);
ここの例 を参照してください。
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);
あなたのコードからあなたがやりたいと思うことは、関数を実行し、いくつかのジョブが完了するまで何度も何度も実行することです...
それは実際には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の答えが最良のようです:)
あなたはwindow.setTimeoutでトリックを使用してそれを行うことができます
var Interval = function () {
if (condition) {
//do Stuff
}
else {
window.setTimeout(Interval, 20);
};
};
window.setTimeout(Interval, 20);