Javascript的setInterval函数来清除自己?
myInterval = setInterval(function(){ MyFunction(); },50); function MyFunction() { //Can I call clearInterval(myInterval); in here? }
间隔不会停止(不被清除),如果我上面编码的是好的,那么它会帮助我在别处寻找导致问题的原因。 谢谢。
编辑:我们假设它完成clearInterval被调用之前的几个间隔,它删除了setTimeout的需要。
只要你有保存interval
variables的范围,你可以从任何地方取消它。
在“孩子”范围内:
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);