停止特定的setTimeout循环如何使用clearTimeout

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了停止特定的setTimeout循环如何使用clearTimeout相关的知识,希望对你有一定的参考价值。

如何使用setTimeout停止特定的clearTimeout(myVar)循环?

我使用多个回调,包括唯一的音频文件名作为参数。当函数triggerAudio收到回调时,它会启动音频文件循环。问题是,如果我已经启动了多个setTimeout音频循环(即多个声音同时播放),我该如何停止特定的循环/声音/ setTimout?换句话说,我该如何选择停止哪个音频循环?

// 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
}

我怀疑我需要以某种方式命名(我不确定术语)每个回调开始的setTimeout,以便我可以阻止那个?但是,我不知道如何处理这个问题。

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

然后你可以调用clearTimeout(超时)来清除你的超时功能。对于您的场景,您可以使用变量来保留超时对象,因此当您尝试播放视频时,您可以验证超时对象并清除它(如果未定义),如下所示:

if (timeout) clearTimeout(timeout)

停止先前的超时

以上是关于停止特定的setTimeout循环如何使用clearTimeout的主要内容,如果未能解决你的问题,请参考以下文章

如何从 for() 循环中获取特定行。它应该停止时继续循环

arduino for循环 时间控制?

如何使用setTimeout进行超时循环

如何使用setTimeout进行超时循环

如何让 JS onkeyup事件停止一定事件后执行某个操作

我应该如何并行使用 requestAnimationFrame 和 setTimeout 来制作更好的游戏循环?