我认为这应该是一个简单的问题,但我最终会陷入困境。
我创建了一个应用程序,它根据延迟“setInterval”在Titanium中通过屏幕循环图像。
它无限期地循环图像,但我想添加一个函数,用户可以在一个时间延迟(通过循环的一定次数的迭代)或只是当他们按下按钮时退出循环(“停止“)。
此代码用于调用一个函数,该函数从我的mamp服务器中提取图像并在Titanium中创建一个显示它的新窗口:
setInterval(function(){call();}, 3000);
但是当我尝试更进一步时它不起作用。
var keepGoing;
do {
setInterval(function(){call();}, 3000);
}
while (keepGoing);
function stop(e){
return keepGoing = false;
}
从我的xml调用函数“stop”,如下所示:
<Button id="stop" onClick="stop">stop</Button>
我甚至尝试了以下内容无济于事:
do {
setInterval(function(){call();}, 3000);
}
while (0 > 1);
这样它会循环一次然后停止工作。
任何想法都将不胜感激!
答案 0 :(得分:3)
启动setInterval
后,它将进入无限循环。如果您想停止setInterval
,请拨打clearInterval
。
var interval;
interval = setInterval(function(){call();}, 3000);
function stop(e){
clearInterval(interval);
}
这完成了我的工作。
答案 1 :(得分:0)
你需要这样的模式:
function loop () {
call();
if (keepGoing) {
setTimeout(loop, 3000);
}
}
loop();
顺便说一句,为什么下面的代码不起作用是一个关于访谈的流行问题(有人多次问过我。)
var keepGoing;
do { setInterval(call, 3000); } while (keepGoing);
诀窍是,传递到setInterval
的函数在这里有时会在3s之后调用,但前提是主线程是空闲的。它永远不会自由 - 它正在做无限循环。