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
),您的问题会得到解决吗?所以
如果(!停止)