【问题标题】:How Stop Specific setTimeout Loop Using clearTimeout如何使用 clearTimeout 停止特定的 setTimeout 循环
【发布时间】:2017-12-25 18:10:58
【问题描述】:

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

我正在使用包含唯一音频文件名作为参数的多个回调。当函数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,以便我可以停止那个?但是,我不确定如何解决这个问题。

【问题讨论】:

    标签: javascript audio callback settimeout cleartimeout


    【解决方案1】:
    var timeout = setTimeout(function() {...}, 1000);
    

    然后你可以调用 clearTimeout(timeout) 来清除你的超时函数。对于您的场景,您可以只使用一个变量来保留超时对象,因此当您尝试播放视频时,您可以验证超时对象并在未定义时将其清除,如下所示:

    if (timeout) clearTimeout(timeout)
    

    停止之前的超时

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-16
      • 1970-01-01
      • 2018-06-21
      • 2018-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多