Javascript 使用jQuery停止包含SetTimeout的循环
假设我有以下代码:Javascript 使用jQuery停止包含SetTimeout的循环,javascript,jquery,Javascript,Jquery,假设我有以下代码: var sequencerRun = function(){ var currentTime = 0 var starting = 200 for(var k = 0; k < 16; k++){ $(".instrument td .beat" + k).each(function(){ setTimeout(blinker, currentTime,$(this)); }) currentTime +=
var sequencerRun = function(){
var currentTime = 0
var starting = 200
for(var k = 0; k < 16; k++){
$(".instrument td .beat" + k).each(function(){
setTimeout(blinker, currentTime,$(this));
})
currentTime += starting
}
}
var timerId;
var runSeq = function(){
setInterval(sequencerRun,3200);
}
$('.play').click(function(){
sequencerRun();
runSeq();
})
$('.stop').click(function(){
//??????
})
var sequencerRun=function(){
var currentTime=0
var启动=200
对于(var k=0;k<16;k++){
$(“.instrument td.beat”+k).每个(函数(){
设置超时(闪烁,当前时间,$(此));
})
当前时间+=启动
}
}
var-timerId;
var runSeq=函数(){
设置间隔(sequencerRun,3200);
}
$('.play')。单击(函数(){
sequencerRun();
runSeq();
})
$('.stop')。单击(函数(){
//??????
})
我使用这个代码作为一种方式,在我正在构建的鼓机中运行我的音序器
sequencerRun
运行一个使用表构建的矩阵,并检查每一列是否播放相应的声音。我所做的是分别使用setTimeout(blinker,currentTime,$(this)),在不同的时间(0200400,…,1600)在每个列(1-16)安排检查代码>。问题是这些事件在sequencerRun
上的每次调用时都会立即安排。因此,如果调用了sequencerRun
,并且我在时间850单击,我希望所有时间为1000、1200、1400、1600的设置超时都不要调用闪烁器。是否仍要执行此操作?将间隔存储在变量中并使用
另外,对于setTimeout
本身
setTimeout(blinker, currentTime,$(this));
使用标志
var stopped = false;
$('.stop').click(function(){
clearInterval(interval);
stopped = true;
});
在回调中
将间隔存储在变量中
并使用
另外,对于setTimeout
本身
setTimeout(blinker, currentTime,$(this));
使用标志
var stopped = false;
$('.stop').click(function(){
clearInterval(interval);
stopped = true;
});
在回调中
将间隔存储在变量中
并使用
另外,对于setTimeout
本身
setTimeout(blinker, currentTime,$(this));
使用标志
var stopped = false;
$('.stop').click(function(){
clearInterval(interval);
stopped = true;
});
在回调中
将间隔存储在变量中
并使用
另外,对于setTimeout
本身
setTimeout(blinker, currentTime,$(this));
使用标志
var stopped = false;
$('.stop').click(function(){
clearInterval(interval);
stopped = true;
});
在回调中
setTimeout(闪烁,当前时间,$(此))代码>我想停止通过此setTimeout运行的计划的。我现在正在编辑这篇文章。太棒了。谢谢@MateurData分析师,很高兴它能帮上忙:)嘿,我还有一个问题,停下来玩可以来回点击。当我点击播放,然后点击停止闪烁被调用,但不执行。当我按下play stop,然后立即再次按下play时,问题就出现了。标志改变了,我现在运行了两次迭代。有什么建议吗?@TheamateUrdata分析师,我不确定我是否完全理解你。如果您使用if
条件(如闪烁
)包装sequenceRun
),您的问题会得到解决吗?所以如果(!stopped)
设置超时(闪烁,当前时间,$(此))代码>我想停止通过此setTimeout运行的计划的。我现在正在编辑这篇文章。太棒了。谢谢@MateurData分析师,很高兴它能帮上忙:)嘿,我还有一个问题,停下来玩可以来回点击。当我点击播放,然后点击停止闪烁被调用,但不执行。当我按下play stop,然后立即再次按下play时,问题就出现了。标志改变了,我现在运行了两次迭代。有什么建议吗?@TheamateUrdata分析师,我不确定我是否完全理解你。如果您使用if
条件(如闪烁
)包装sequenceRun
),您的问题会得到解决吗?所以如果(!stopped)
设置超时(闪烁,当前时间,$(此))代码>我想停止通过此setTimeout运行的计划的。我现在正在编辑这篇文章。太棒了。谢谢@MateurData分析师,很高兴它能帮上忙:)嘿,我还有一个问题,停下来玩可以来回点击。当我点击播放,然后点击停止闪烁被调用,但不执行。当我按下play stop,然后立即再次按下play时,问题就出现了。标志改变了,我现在运行了两次迭代。有什么建议吗?@TheamateUrdata分析师,我不确定我是否完全理解你。如果您使用if
条件(如闪烁
)包装sequenceRun
),您的问题会得到解决吗?所以如果(!stopped)
设置超时(闪烁,当前时间,$(此))代码>我想停止通过此setTimeout运行的计划的。我现在正在编辑这篇文章。太棒了。谢谢@MateurData分析师,很高兴它能帮上忙:)嘿,我还有一个问题,停下来玩可以来回点击。当我点击播放,然后点击停止闪烁被调用,但不执行。当我按下play stop,然后立即再次按下play时,问题就出现了。标志改变了,我现在运行了两次迭代。有什么建议吗?@TheamateUrdata分析师,我不确定我是否完全理解你。如果您使用if
条件(如闪烁
)包装sequenceRun
),您的问题会得到解决吗?所以如果(!停止)