【问题标题】:unable to clear the setInterval无法清除 setInterval
【发布时间】:2013-05-14 09:19:00
【问题描述】:

谁能帮我清除下面代码中的 SetInterval。我已经厌倦了 window.clearInterval(intervalListener) 它不起作用。

    <audio id="audio1" controls="controls" ontimeupdate="init(this.currentTime)"; style="display:block;">
    <source src="Audio.mp3" type="audio/mpeg">
    <source src="Audio.ogg" type="audio/ogg">
    <embed height="50" width="100" src="Audio.mp3"></embed>
    </audio>

    function init(val)
    {
    var audio=document.getElementById('audio1');

    if(val==2)
    {
    var a=0;
    intervalListener = self.setInterval(function()

    {
        alert(a);
        if(a===8)
        {
          window.clearInterval(intervalListener);
        }
        a++;
    }, 1000);



    }

    }

【问题讨论】:

  • 它工作得很好,伙计......
  • 在这里查看jsfiddle.net/7XrUq
  • 我知道单独调用时效果很好。
  • 我需要在 ontimeupdate 播放音频时完成

标签: javascript jquery html audio


【解决方案1】:

尝试在函数外声明intervalListener:

var intervalListener;

function init(val) {
    var audio=document.getElementById('audio1');

    if(val==2) {
        var a=0;
        intervalListener = self.setInterval(function(){
            alert(a);
            if(a===8){
                window.clearInterval(intervalListener);
            }
            a++;
        }, 1000);
    }
}

【讨论】:

    【解决方案2】:

    两件事:

    1. 确保self.setInterval self 实际上是窗口。
    2. alert(a) 可能会在停止 JS 执行时干扰时间间隔,请尝试使用 console.log(a)

    另外,setInterval 通常最好替换为 setTimeout

    function interval(a){
        setTimeout(function(){
            console.log(a);
            if(a<8) interval(++a);
        },1000);
    }
    interval(0);
    

    或者,如果您不喜欢匿名函数,您可以使用:

    var a = 0;
    function interval2(){
        console.log(a);
        if(a<8){
            a++;
            setTimeout(interval2,1000);
        }   
    }
    interval2();
    

    【讨论】:

      【解决方案3】:

      您需要在所有函数之外同时声明aintervalListener,以便它们处于全局范围内。

      【讨论】:

        猜你喜欢
        • 2020-10-22
        • 2019-07-03
        • 1970-01-01
        • 2016-03-14
        • 2016-02-09
        • 1970-01-01
        • 2021-12-29
        • 2012-08-19
        • 2020-01-12
        相关资源
        最近更新 更多