function One(){
setTimeout(function(){
Two();
},3000);
}
function Two(){
setTimeout(function(){
One();
},3000);
}
function Stop(){
alert('this should run,and the functions above should stop');
}
当你点击第三个时,我想停止前两个功能的自动运行。 到现在为止,如果你点击第三个,警报会显示,但循环继续。任何方式这样做?
答案 0 :(得分:2)
var oneTimeout, twoTimeout;
function One(){
oneTimeout = setTimeout(function(){
Two();
},3000);
}
function Two(){
twoTimeout = setTimeout(function(){
One();
},3000);
}
function Stop(){
clearTimeout(oneTimeout);
clearTimeout(twoTimeout);
alert('this should run,and the functions above should stop');
}
答案 1 :(得分:1)
如果存储超时呼叫的ID,您可以随时清除它。
var timeoutId1, timeoutId2;
function One() {
timeoutId1 = setTimeout(function() {
Two();
}, 3000);
}
function Two() {
timeoutId2 = setTimeout(function() {
One();
}, 3000);
}
function Stop() {
// alert('this should run,and the functions above should stop');
clearTimeout(timeoutId1);
clearTimeout(timeoutId2);
}
答案 2 :(得分:0)
您应该在前两个函数中使用var timer = setTimeout(function()...); return timer;
并将两个timer
变量(其中包含一个标识超时计时器的数字)传递给第三个函数。然后在调用第三个函数时调用clearTimeout(timer)
。
答案 3 :(得分:0)
var timeout1;
//... Define Function name
function rotate() {
timeout1 = setTimeout( rotate, 4000);
}
另一种方式
var rotateTimeout;
rotateTimeout = window.setInterval(rotate,4000);
window.clearInterval(rotateTimeout);
答案 4 :(得分:0)
这样的事情:
function TimerController(){
var ids = {};
this.start = function(id, time, fn) {
ids[id] = setTimeout(function(){
fn();
delete ids[id];
}, time);
}
this.stop = function(id) {
clearTimeout(ids[id]);
delete ids[id];
}
this.stopAll = function() {
for (var id in ids) this.stop(id);
}
}
var ctrlr = new TimerController();
function One(){
ctrlr.start('one', 3000, Two);
}
function Two(){
ctrlr.start('two', 3000, One);
}
function Stop() {
ctrlr.stopAll();
}
小解释: javascript中的超时和间隔都返回标识符,可用于事件取消。
var id = setTimeout(function(){console.log('Triggered!');}, 0);
clearTimeout(id);
以上示例中永远不会调用函数。
因此,如果我们想要阻止它,我们应该存储超时ID
上面的TimerController
包含了这个逻辑。