Javascript 一个函数内另一个函数的停止超时
我想在单击第三个函数时停止前两个函数的自动运行。Javascript 一个函数内另一个函数的停止超时,javascript,jquery,Javascript,Jquery,我想在单击第三个函数时停止前两个函数的自动运行。 现在,如果单击第三个按钮,警报将显示,但循环将继续。有什么方法可以做到这一点吗?您应该使用var timer=setTimeout(function()…);返回计时器,并将twotimer变量(其中包含一个标识超时计时器的数字)传递给第三个函数。然后,当调用第三个函数时,只需调用clearTimeout(timer) 查看此如果您存储了超时呼叫的ID,您可以随时清除它。 另一种方式 var timeout1; //... Define Fu
现在,如果单击第三个按钮,警报将显示,但循环将继续。有什么方法可以做到这一点吗?您应该使用
var timer=setTimeout(function()…);返回计时器在前两个函数中选择code>,并将twotimer
变量(其中包含一个标识超时计时器的数字)传递给第三个函数。然后,当调用第三个函数时,只需调用clearTimeout(timer)
查看此如果您存储了超时呼叫的ID,您可以随时清除它。
- 另一种方式
var timeout1;
//... Define Function name
function rotate() {
timeout1 = setTimeout( rotate, 4000);
}
类似这样的东西:
var rotateTimeout;
rotateTimeout = window.setInterval(rotate,4000);
window.clearInterval(rotateTimeout);
小解释:
javascript中的超时和间隔都返回标识符,可用于事件取消
function TimerController(){
var ids = {};
this.start = function(id, time, fn) {
if (ids[id]) clearTimeout(ids[id]);
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();
}
在上面的示例中,永远不会调用函数
因此,如果我们想停止超时,就应该存储超时ID。
上面的TimerController
包含此逻辑
var timeout1;
//... Define Function name
function rotate() {
timeout1 = setTimeout( rotate, 4000);
}
var rotateTimeout;
rotateTimeout = window.setInterval(rotate,4000);
window.clearInterval(rotateTimeout);
function TimerController(){
var ids = {};
this.start = function(id, time, fn) {
if (ids[id]) clearTimeout(ids[id]);
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();
}
var id = setTimeout(function(){console.log('Triggered!');}, 0);
clearTimeout(id);