2011-10-01 54 views
3

我有一個setInterval調用一個顯示動畫的循環。clearInterval後執行代碼

當I clearInterval響應用戶輸入時,隊列中可能有一個或多個循環回調。如果我在clearInterval語句後面直接插入函數調用,則函數調用將首先完成(打印某些內容),然後執行排隊循環回調,從而擦除我想要打印的內容。

請參閱下面的代碼。

function loop() { 
    // print something to screen 
} 

var timer = setInterval(loop(), 30); 

canvas.onkeypress = function (event) { 
    clearInterval(timer); 
    // print something else to screen 
} 

什麼是最好的處理方法?延遲// print something else to screen?在循環中進行新的打印?

編輯:謝謝你的答案。爲了將來的參考,我的問題是觸發額外打印的事件被隱藏在循環中,所以一旦執行該操作,控制權就交還給未完成的循環,然後重寫它。乾杯。

回答

1

你也可以使用一個標誌,從而忽略任何排隊的功能:

var should; 

function loop() { 
    if(!should) return; // ignore this loop iteration if said so 

    // print something to screen 
} 

should = true; 
var timer = setInterval(loop, 30); // I guess you meant 'loop' without '()' 

canvas.onkeypress = function (event) { 
    should = false; // announce that loop really should stop 
    clearInterval(timer); 
    // print something else to screen 
} 
2

首先,你可能是指:

var timer = setInterval(loop, 30); 

其次,你確定調用clearInterval不乾淨等待loop()調用的隊列?如果是這種情況,您可以通過使用某種警衛來輕鬆禁用這些呼叫:

var done = false; 

function loop() { 
    if(!done) { 
     // print something to screen 
    } 
} 

var timer = setInterval(loop(), 30); 

canvas.onkeypress = function (event) { 
    clearInterval(timer); 
    done = true; 
    // print something else to screen 
}