javascript - 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。
您正在通过重用关键字在函数Interval1
内部重新定义。相反,只需分配它:player
var
// ...
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 的评论也解释了这一点。
根据@r3wt 再次编辑
- 请注意,当您需要完美的时间准确性时,JavaScript 计时器不一定是最可靠的。请参阅这篇 MDN 文章,了解一些问题。
- 您应该使用、和
Audio
等原生事件。您可以在此处查看完整的活动列表。(用法:)play
pause
ended
sound.addEventListener('play'...
我不打算详细说明,您可以在网上找到有关我刚才提到的更多信息。
推荐阅读
- excel - 如何在 VBA 中的多列 ListBox 中的文件夹中填充多个文件的文件名和修改日期?
- python - Convert multipule HTML to CSV file quickly in Python
- c++ - 这是在 C++ 中定义结构的全局实例的好方法吗?
- video - 无法播放解密的 .ts 文件
- c++ - Windows API 模拟来自不同键盘的按键 (C++)
- javascript - 反应 useContext + TypeScript 范围错误
- excel - 更改 Excel 状态栏的背景颜色
- authentication - 无法使用 Python 请求模块登录 PSN
- python - 我如何在一个包含函数调用的列表中编写下面的 python 代码?
- php - PHP setcookie 域参数