2015-06-20 64 views
0
一個setTimeout的循環

假設我有以下代碼:停止,其中包含與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 += starting 
    } 
    } 

    var timerId; 

    var runSeq = function(){ 
    setInterval(sequencerRun,3200); 
    } 

    $('.play').click(function(){ 
    sequencerRun(); 
    runSeq(); 
    }) 

    $('.stop').click(function(){ 
    //?????? 
    }) 

我使用這個代碼的方式,通過我的鼓機我建立序運行。 sequencerRun貫穿使用table構建的矩陣,並檢查每列以查看它是否會播放相應的聲音。我正在做的是分別在不同時間(0,200,400,...,1600)在每列(1-16)安排檢查,分別使用setTimeout(blinker, currentTime,$(this));。問題是這些事件是在sequencerRun上的每次調用中立即安排的。因此,如果sequencerRun被調用,並且我在時間850點擊,我想要所有setTimeouts與時間1000,1200,1400,1600不調用blinker。無論如何要做到這一點?

回答

3

存放在variable和間隔使用clearInterval()

var interval; 
var runSeq = function(){ 
    interval = setInterval(sequencerRun,3200); 
    } 

    $('.play').click(function(){ 
    sequencerRun(); 
    runSeq(); 
    }) 

    $('.stop').click(function(){ 
    clearInterval(interval); 
    }); 

此外,對於setTimeout本身

setTimeout(blinker, currentTime,$(this)); 

使用標誌

var stopped = false; 
$('.stop').click(function(){ 
     clearInterval(interval); 
     stopped = true; 
     }); 

並在回調

function blinker(){ 
    if(stopped){ 
     return; 
    } 
    //...else, continue normal execution 
} 
+0

'的setTimeout(閃燈,currentTime的,$(本));'我想停止正在通過這個setTimeout的運行計劃的。我正在編輯帖子。 – theamateurdataanalyst

+0

@theamateurdataanalyst,看我更新的回答 – AmmarCSE

+0

夥計。棒極了。謝謝! – theamateurdataanalyst