2017-12-25 5 views
-1

Wie kann ich eine bestimmte setTimeout Schleife mit clearTimeout(myVar) stoppen?Wie Stop Spezifische setTimeout Schleife Verwenden von clearTimeout

Ich verwende mehrere Rückrufe, die eindeutige Audiodateinamen als Parameter enthalten. Wenn die Funktion triggerAudio einen Rückruf erhält, wird eine Audiodateischleife gestartet. Das Problem ist, dass, wenn ich mehr als eine setTimeout-Audio-Schleife gestartet habe (d. H. Mehrere Sounds gleichzeitig spielen), wie kann ich einen bestimmten Loop/Sound/setTimout stoppen? Anders gesagt, wie kann ich wählen, welcher Audio-Loop gestoppt wird?

// starts 1.wav looping 
(function loopStart() { 
    triggerAudio('1.wav'); 
}()); 

// starts 2.wav looping 
(function loopStart() { 
    triggerAudio('2.wav'); 
}()); 

// stops one of the audio loops after 5 seconds 
setTimeout(function() { 
    (function loopStop() { 
     clearTimeout(myVar); // not sure how to control which function this will stop/clear 
    }()); 
}, 5000); 

// main functino that loops the files noted by the callbacks 
function triggerAudio(soundFileName) { 
    // code that starts and loops audio file with setTimeout loop 
} 

Ich vermute, ich muss irgendwie Namen (ich bin der Terminologie nicht sicher) die setTimeout von jedem Rückruf gestartet, so dass ich, dass man aufhören kann? Aber ich bin mir nicht sicher, wie ich das angehen soll.

Antwort

1
var timeout = setTimeout(function() {...}, 1000); 

Dann können Sie clearTimeout (Timeout) aufrufen, um Ihre Timeout-Funktion zu löschen. Für Ihr Szenario können Sie nur eine Variable verwenden, um das Timeout-Objekt zu halten, so dass, wenn Sie versuchen, das Video zu spielen, können Sie das Timeout-Objekt und deaktivieren Sie es überprüfen, ob es nicht undefiniert, ist wie folgt:

if (timeout) clearTimeout(timeout) 

um das vorherige Zeitlimit zu stoppen

Verwandte Themen