2017-08-27 18 views
0

所以,我有一個腳本有很多setTimeoutsetIntervalClearInterval刪除或不是調用事件JS

我的問題是,當我使用clearInterval方法,我想知道如果方法燒製後停止功能,或者如果該方法確實刪除着火事件。這對我來說非常重要,因爲如果clearInterval不刪除觸發事件,計算機會繼續調用大量可能會降低計算機速度的事件。

我的代碼是有點長要在這個崗位全面上市,但我用setInterval這樣的:

teste = []; 
teste.push (window.setInterval (function() {Do stuff...}, 20)); 
    // The same for window.setTimeout(); 

燒成clearInterval方法可以阻止:

window.setInterval (function() { 
    /*Here after firing or can stop the firing event*/ 
    Do stuff... 
}, 20); 

我刪除setInterval像這樣:

window.clearInterval (teste [teste.length-1]); // The same for window.clearTimeout(); 

任何幫助表示讚賞,

如果您有任何問題或意見,請告訴我。

感謝

+1

您可以發表您正在談論的代碼的完整副本,而不是一個釋義版本嗎?例如,你何時/在哪裏調用'clearInterval'? – Pytth

+1

我不明白你的意思是「如果方法停止功能後發射或如果方法刪除肯定的射擊事件」;你能再次解釋一下這個區別嗎?您似乎擔心在調用'clearInterval'後,您傳遞給'setInterval'的回調將繼續被調用 - 除非您沒有傳遞正確的區間ID,否則不應該發生。如果這確實是問題,我建議你發表一個示例來證明這種行爲。 – Nickolay

回答

0

嗯,我會用不同的方法在這裏:

var queue = []; 

function prepare (fx, delay, repeated) { 
    return { 
    fx: fx, 
    at: new Date().getTime() + delay, 
    repeated: !!repeated 
    } 
} 

queue.push(prepare(function() {…}, 20)); 
. 
queue.push(prepare(function() {…}, 20), true); 
. 
. 
. 

window.setTimeout(function check() { 
    var now = new Date().getTime(), 
      newQueue = [], 
      i = 0, entry; 

    for (; i < queue.length; i++) { 
    entry = queue[i]; 

    if (entry.at <= now) { 
     entry.fx(); 

     if (entry.repeated) newQueue.push(entry); 

    } else { 
     newQueue.push(entry); 
    } 
    } 

    queue = newQueue; 
    window.setTimeout(check, 1); 

}, 1); 

你只有一個定時器/間隔運行的,因此完全控制了所謂將被命名的方式。另外,不會有JS事件隊列可能運行的問題。