Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用clearTimeout停止特定的setTimeout循环_Javascript_Audio_Callback_Settimeout_Cleartimeout - Fatal编程技术网

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

Javascript 如何使用clearTimeout停止特定的setTimeout循环,javascript,audio,callback,settimeout,cleartimeout,Javascript,Audio,Callback,Settimeout,Cleartimeout,如何使用clearTimeout(myVar)停止特定的setTimeout循环 我正在使用多个回调,其中包括唯一的音频文件名作为参数。当函数triggerAudio收到回调时,它将启动音频文件循环。问题是,如果我启动了多个setTimeout音频循环(即,多个声音同时播放),如何停止特定的循环/声音/setTimeout?换句话说,我如何选择停止哪个音频循环 // starts 1.wav looping (function loopStart() { triggerAudio('1.

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

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

// 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(timeout)来清除超时函数。对于您的场景,您可以只使用一个变量来保留timeout对象,因此当您尝试播放视频时,您可以验证timeout对象并在其未定义时将其清除,如下所示:

if (timeout) clearTimeout(timeout)
停止上一个超时