无法清除 setInterval
Posted
技术标签:
【中文标题】无法清除 setInterval【英文标题】:unable to clear the 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 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 播放音频时完成 【参考方案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】:两件事:
-
确保
self.setInterval
self 实际上是窗口。
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】:您需要在所有函数之外同时声明a
和intervalListener
,以便它们处于全局范围内。
【讨论】:
以上是关于无法清除 setInterval的主要内容,如果未能解决你的问题,请参考以下文章