javascript的interval如何真正清除
别和我说clearInterval了,clearInterval只是停止计时器而已,我想要的是真正清除该计时器,然后某个事件再重启该计时器interval
...全文
请发表友善的回复…
发表回复
老王就是我 2018-03-21
- 打赏
- 举报
都说了,不行啊!NULL都不行,还怎么制空?[/quote] 不科学啊,理论上不会啊[/quote]
就是这样,不知道为啥,再重新启动的话就会两个计时器叠加[/quote]
我大概试了一下,一个定时器是可以取消的,取消不掉原因可能就在定时器的叠加上面,因为你操作的是一个数据,所以一叠加会出问题[/quote]
所以并没有真正清除而只是停止而已啊!比如同一个计时器,停止后又运行了,则会出现我说的问题——一个计时器每秒+1变成每秒+2[/quote]
你这不是计时器setInterval的问题,应该是对同一事件重复绑定的问题。
你的代码应该是在事件触发之后,又对这个事件重复绑定了一次事件函数,这样在下次触发事件时,事件函数会连着执行两次,同时创建两个计时器。
[/quote]
我是CLEAR后才再次绑定事件,而不是运行事件过程中再次绑定[/quote]
什么时候再次绑定事件都不行。
只要是绑定了两次事件,在下次触发事件时,事件函数就会连着执行两次。
主要是事件函数连着执行两次的问题,而同时创建两个计时器只是附带结果。
总之不要重复绑定事件。事件应该只在初始化时绑定一次。或者在再次绑定事件前先解除上一次的绑定。
[/quote]
如何解除上次绑定?[/quote]
原生
addEventListener()绑定的事件用 removeEventListener()移除
jquery绑定的事件用 off()移除
[/quote]
好,我试试

老王就是我 2018-03-21
- 打赏
- 举报
都说了,不行啊!NULL都不行,还怎么制空?[/quote] 不科学啊,理论上不会啊[/quote]
就是这样,不知道为啥,再重新启动的话就会两个计时器叠加[/quote]
我大概试了一下,一个定时器是可以取消的,取消不掉原因可能就在定时器的叠加上面,因为你操作的是一个数据,所以一叠加会出问题[/quote]
所以并没有真正清除而只是停止而已啊!比如同一个计时器,停止后又运行了,则会出现我说的问题——一个计时器每秒+1变成每秒+2
老王就是我 2018-03-21
- 打赏
- 举报
但如果我下面再执行一次事件呢?[/quote]
如果你是让多个计时器同时运行,就要保存住每一个正在运行的setInterval()所返回的id数值。这样才能用 clearInterval()通过对应的id来清除对应的计时器。
<input type="button" value="运行1" onclick="func('text1');" />
<div id="text1"></div>
<input type="button" value="运行2" onclick="func('text2');" />
<div id="text2"></div>
<script type="text/javascript">
function func(id) {
var obj = document.getElementById(id);
obj.innerHTML = 0;
clearInterval(obj.timer);
obj.timer = setInterval(function(){
obj.innerHTML++;
if (obj.innerHTML>=5)
clearInterval(obj.timer);
}, 1000);
}
</script>
[/quote]
虽然没有解决我的问题,不过谢谢了天际的海浪 2018-03-21
- 打赏
- 举报
都说了,不行啊!NULL都不行,还怎么制空?[/quote] 不科学啊,理论上不会啊[/quote]
就是这样,不知道为啥,再重新启动的话就会两个计时器叠加[/quote]
我大概试了一下,一个定时器是可以取消的,取消不掉原因可能就在定时器的叠加上面,因为你操作的是一个数据,所以一叠加会出问题[/quote]
所以并没有真正清除而只是停止而已啊!比如同一个计时器,停止后又运行了,则会出现我说的问题——一个计时器每秒+1变成每秒+2[/quote]
你这不是计时器setInterval的问题,应该是对同一事件重复绑定的问题。
你的代码应该是在事件触发之后,又对这个事件重复绑定了一次事件函数,这样在下次触发事件时,事件函数会连着执行两次,同时创建两个计时器。
[/quote]
我是CLEAR后才再次绑定事件,而不是运行事件过程中再次绑定[/quote]
什么时候再次绑定事件都不行。
只要是绑定了两次事件,在下次触发事件时,事件函数就会连着执行两次。
主要是事件函数连着执行两次的问题,而同时创建两个计时器只是附带结果。
总之不要重复绑定事件。事件应该只在初始化时绑定一次。或者在再次绑定事件前先解除上一次的绑定。
[/quote]
如何解除上次绑定?[/quote]
原生
addEventListener()绑定的事件用 removeEventListener()移除
jquery绑定的事件用 off()移除
老王就是我 2018-03-21
- 打赏
- 举报
都说了,不行啊!NULL都不行,还怎么制空?[/quote] 不科学啊,理论上不会啊[/quote]
就是这样,不知道为啥,再重新启动的话就会两个计时器叠加[/quote]
我大概试了一下,一个定时器是可以取消的,取消不掉原因可能就在定时器的叠加上面,因为你操作的是一个数据,所以一叠加会出问题[/quote]
所以并没有真正清除而只是停止而已啊!比如同一个计时器,停止后又运行了,则会出现我说的问题——一个计时器每秒+1变成每秒+2[/quote]
你这不是计时器setInterval的问题,应该是对同一事件重复绑定的问题。
你的代码应该是在事件触发之后,又对这个事件重复绑定了一次事件函数,这样在下次触发事件时,事件函数会连着执行两次,同时创建两个计时器。
[/quote]
我是CLEAR后才再次绑定事件,而不是运行事件过程中再次绑定[/quote]
什么时候再次绑定事件都不行。
只要是绑定了两次事件,在下次触发事件时,事件函数就会连着执行两次。
主要是事件函数连着执行两次的问题,而同时创建两个计时器只是附带结果。
总之不要重复绑定事件。事件应该只在初始化时绑定一次。或者在再次绑定事件前先解除上一次的绑定。
[/quote]
如何解除上次绑定?
天际的海浪 2018-03-21
- 打赏
- 举报
都说了,不行啊!NULL都不行,还怎么制空?[/quote] 不科学啊,理论上不会啊[/quote]
就是这样,不知道为啥,再重新启动的话就会两个计时器叠加[/quote]
我大概试了一下,一个定时器是可以取消的,取消不掉原因可能就在定时器的叠加上面,因为你操作的是一个数据,所以一叠加会出问题[/quote]
所以并没有真正清除而只是停止而已啊!比如同一个计时器,停止后又运行了,则会出现我说的问题——一个计时器每秒+1变成每秒+2[/quote]
你这不是计时器setInterval的问题,应该是对同一事件重复绑定的问题。
你的代码应该是在事件触发之后,又对这个事件重复绑定了一次事件函数,这样在下次触发事件时,事件函数会连着执行两次,同时创建两个计时器。
[/quote]
我是CLEAR后才再次绑定事件,而不是运行事件过程中再次绑定[/quote]
什么时候再次绑定事件都不行。
只要是绑定了两次事件,在下次触发事件时,事件函数就会连着执行两次。
主要是事件函数连着执行两次的问题,而同时创建两个计时器只是附带结果。
总之不要重复绑定事件。事件应该只在初始化时绑定一次。或者在再次绑定事件前先解除上一次的绑定。
老王就是我 2018-03-21
- 打赏
- 举报
都说了,不行啊!NULL都不行,还怎么制空?[/quote] 不科学啊,理论上不会啊[/quote]
就是这样,不知道为啥,再重新启动的话就会两个计时器叠加[/quote]
我大概试了一下,一个定时器是可以取消的,取消不掉原因可能就在定时器的叠加上面,因为你操作的是一个数据,所以一叠加会出问题[/quote]
所以并没有真正清除而只是停止而已啊!比如同一个计时器,停止后又运行了,则会出现我说的问题——一个计时器每秒+1变成每秒+2[/quote]
你这不是计时器setInterval的问题,应该是对同一事件重复绑定的问题。
你的代码应该是在事件触发之后,又对这个事件重复绑定了一次事件函数,这样在下次触发事件时,事件函数会连着执行两次,同时创建两个计时器。
[/quote]
我是CLEAR后才再次绑定事件,而不是运行事件过程中再次绑定
天际的海浪 2018-03-21
- 打赏
- 举报
都说了,不行啊!NULL都不行,还怎么制空?[/quote] 不科学啊,理论上不会啊[/quote]
就是这样,不知道为啥,再重新启动的话就会两个计时器叠加[/quote]
我大概试了一下,一个定时器是可以取消的,取消不掉原因可能就在定时器的叠加上面,因为你操作的是一个数据,所以一叠加会出问题[/quote]
所以并没有真正清除而只是停止而已啊!比如同一个计时器,停止后又运行了,则会出现我说的问题——一个计时器每秒+1变成每秒+2[/quote]
你这不是计时器setInterval的问题,应该是对同一事件重复绑定的问题。
你的代码应该是在事件触发之后,又对这个事件重复绑定了一次事件函数,这样在下次触发事件时,事件函数会连着执行两次,同时创建两个计时器。
咸哼酒家 2018-03-21
- 打赏
- 举报

天际的海浪 2018-03-20
- 打赏
- 举报
但如果我下面再执行一次事件呢?[/quote]
如果你是让多个计时器同时运行,就要保存住每一个正在运行的setInterval()所返回的id数值。这样才能用 clearInterval()通过对应的id来清除对应的计时器。
<input type="button" value="运行1" onclick="func('text1');" />
<div id="text1"></div>
<input type="button" value="运行2" onclick="func('text2');" />
<div id="text2"></div>
<script type="text/javascript">
function func(id) {
var obj = document.getElementById(id);
obj.innerHTML = 0;
clearInterval(obj.timer);
obj.timer = setInterval(function(){
obj.innerHTML++;
if (obj.innerHTML>=5)
clearInterval(obj.timer);
}, 1000);
}
</script>
赫连伯伯 2018-03-20
- 打赏
- 举报
都说了,不行啊!NULL都不行,还怎么制空?[/quote] 不科学啊,理论上不会啊[/quote]
就是这样,不知道为啥,再重新启动的话就会两个计时器叠加[/quote]
我大概试了一下,一个定时器是可以取消的,取消不掉原因可能就在定时器的叠加上面,因为你操作的是一个数据,所以一叠加会出问题
老王就是我 2018-03-20
- 打赏
- 举报
但如果我下面再执行一次事件呢?
老王就是我 2018-03-20
- 打赏
- 举报
对啊,就是这样啊,所以,clear并没有真正清除该计时器,只是停止而已
100001夜 2018-03-20
- 打赏
- 举报
应该是楼主第二次又绑定了一次事件,这样就造成2个计时器
天际的海浪 2018-03-19
- 打赏
- 举报
看看这个例子
<input type="button" value="运行" onclick="func();" />
<div id="text"></div>
<script type="text/javascript">
var timer,i;
function func() {
i = 0;
clearInterval(timer);
timer = setInterval(function(){
document.getElementById("text").innerHTML = ++i;
if (i>=5)
clearInterval(timer);
}, 1000);
}
</script>
似梦飞花 2018-03-19
- 打赏
- 举报
都说了,不行啊!NULL都不行,还怎么制空?[/quote] 不科学啊,理论上不会啊[/quote]
就是这样,不知道为啥,再重新启动的话就会两个计时器叠加[/quote]
<input type="button" value="run" onclick="add()"/>
<input type="button" value="stop" onclick="stop()"/>
<div></div>
<script>
var i=0,t=null;
var div=document.querySelector('div');
function add() {
t=setInterval(function(){
div.innerHTML=++i;
},1e3)
}
function stop(){
if(t){
clearInterval(t);
t=null;
}
}
</script>
应该是你其他地方的问题老王就是我 2018-03-19
- 打赏
- 举报
都说了,不行啊!NULL都不行,还怎么制空?[/quote] 不科学啊,理论上不会啊[/quote]
就是这样,不知道为啥,再重新启动的话就会两个计时器叠加
老王就是我 2018-03-19
- 打赏
- 举报
不,我这个是写在下面的,TIME里面某个时间段,time>=20{clear}或者function(){clear}。
老王就是我 2018-03-19
- 打赏
- 举报
而且我那个逻辑也不复杂大概逻辑就是:
time=setInterval(function(){
i++;if(i>2)clear(time)
},1000);
function(){clear(time)};
大概就这样,代码没了纯手打懒得写上全部关键字了
斯洛文尼亚旅游 2018-03-19
- 打赏
- 举报
代码发全来,你这样说还不是一样不明不白。最好的办法就是setInterval钱clearInterval
clearInterval(time)
time=setInterval(function a(){sdfdsf},1000);
clearInterval(time)
time=setInterval(function a(){sdfdsf},1000);
加载更多回复(8)