Javascript clearInterval 不起作用(没有错误);秒 相同参数的间隔



使用我的javascript,我不会在单击按钮后播放声音(间隔)并在第二次点击后停止。

没有错误,但是间隔还活着,当我再次按下按钮时,似乎还有另一个间隔,所以他们正在一起添加。

var sound_status = 0;
    var aha = 0;
    var z = 9000;
    var Intervall;
    function play_sound(){
            var sound = new Audio(aha);
            sound.play();
            console.log('1');
        }
        function player(){
            sound_status++;
            if(sound_status == '1'){
                var speed = document.getElementById('metrumIN').value;
                var calc1 = speed * 100;
                var Intervall = setInterval(play_sound, 1000);
                aha = 'sound/sound1.mp3';
                console.log(z);
            }
            if(sound_status=='2'){
                sound_status=0;
                window.clearInterval(Intervall);
            }
        }

欢迎来到SO。

您通过重复使用var关键字来重新定义player功能中的Interval1。相反,只需分配:

// ...
Intervall = setInterval(play_sound, 1000);
// ...

繁荣。

编辑,以进行澄清:

如果您没有if语句,则可以重新定义并正确使用变量(使用相同名称只是不良习惯)。例如:

var foo = 'bar';
function test() {
    var foo = 'hello!';
    console.log(foo); // would print out 'hello!'
}
console.log(foo); // would print out 'bar'

但是,如果有if语句,则"以后"无法访问重新支配。希望会有所帮助。

编辑,再次:

@r3wt的评论也解释了这一点。

编辑,再次,per @r3wt

  • 请注意,当您需要完美的时间准确性时,JavaScript计时器不一定是最可靠的。请参阅有关一些陷阱的MDN文章。
  • 您应该使用Audio本机的事件,例如playpauseended。您可以在此处查看活动的完整列表。(用法:sound.addEventListener('play'...

我不会详细说明太多,您可以找到有关我在网络上提到的内容的更多信息。

最新更新