Javascript clearInterval不会停止间隔
在对同样的问题进行了研究之后,我找不到解决问题的方法。我有以下问题Javascript clearInterval不会停止间隔,javascript,jquery,html,Javascript,Jquery,Html,在对同样的问题进行了研究之后,我找不到解决问题的方法。我有以下问题 功能移动(mov,元件){ canvasMov=document.getElementById('xy_canvas'); ctxMov=canvasMov.getContext(“2d”); wMov=画布宽度; hMov=画布高度; 如果(元素!=“xy_画布”){ my_range=document.getElementById(元素); if(mov){ my_interval=setInterval(函数(){ 如果
功能移动(mov,元件){
canvasMov=document.getElementById('xy_canvas');
ctxMov=canvasMov.getContext(“2d”);
wMov=画布宽度;
hMov=画布高度;
如果(元素!=“xy_画布”){
my_range=document.getElementById(元素);
if(mov){
my_interval=setInterval(函数(){
如果(我的_范围!=null)
touchEvents(我的量程值);
运动(要素);
}, 160);
}否则{
clearInterval(my_interval);
控制台日志(元素,mov);
my_range.value=0;
}
如果(my_range.value==0)
clearInterval(my_interval);
}否则{
if(mov){
my_interval=setInterval(函数(){
eventsMove();
sendMovements();
}, 160);
}否则{
clearInterval(my_interval);
控制台日志(元素,mov);
}
}
}
您只需在顶部定义
my\u interval
,如
var my_interval = null;
目前,您正在您的
条件中创建my\u interval
,如果条件,则它将在其余代码中隐藏。您需要做的就是在顶部定义my\u interval
,类似于
var my_interval = null;
此时,您正在您的条件中创建my_interval
,如果
条件,则它将在代码的其余部分隐藏。启动新的间隔函数时,您不会停止旧的间隔函数clearInterval(my_interval)
将只停止最后一个启动的,但旧的将继续运行。您需要调用clearInterval(my_interval)在每次调用setInterval()
之前执行code>
由于通过代码的所有路径最终都会调用setInterval()
或clearInterval()
,因此您可以在函数开始时执行一次clearInterval(my_interval)
功能移动(mov,元件){
canvasMov=document.getElementById('xy_canvas');
ctxMov=canvasMov.getContext(“2d”);
wMov=画布宽度;
hMov=画布高度;
clearInterval(my_interval)
如果(元素!=“xy_画布”){
my_range=document.getElementById(元素);
if(mov){
如果(my_range.value!=0){
my_interval=setInterval(函数(){
如果(我的_范围!=null)
touchEvents(我的量程值);
运动(要素);
}, 160);
}
}否则{
控制台日志(元素,mov);
my_range.value=0;
}
}否则{
if(mov){
my_interval=setInterval(函数(){
eventsMove();
sendMovements();
}, 160);
}否则{
控制台日志(元素,mov);
}
}
}
启动新的间隔函数时,不会停止旧的间隔函数clearInterval(my_interval)
将只停止最后一个启动的,但旧的将继续运行。您需要调用clearInterval(my_interval)在每次调用setInterval()
之前执行code>
由于通过代码的所有路径最终都会调用setInterval()
或clearInterval()
,因此您可以在函数开始时执行一次clearInterval(my_interval)
功能移动(mov,元件){
canvasMov=document.getElementById('xy_canvas');
ctxMov=canvasMov.getContext(“2d”);
wMov=画布宽度;
hMov=画布高度;
clearInterval(my_interval)
如果(元素!=“xy_画布”){
my_range=document.getElementById(元素);
if(mov){
如果(my_range.value!=0){
my_interval=setInterval(函数(){
如果(我的_范围!=null)
touchEvents(我的量程值);
运动(要素);
}, 160);
}
}否则{
控制台日志(元素,mov);
my_range.value=0;
}
}否则{
if(mov){
my_interval=setInterval(函数(){
eventsMove();
sendMovements();
}, 160);
}否则{
控制台日志(元素,mov);
}
}
}
这不太可能是问题所在。当不使用var
时,变量将在范围内上升,在这种情况下,变量最终会击中窗口
(换句话说,在问题中my_interval=something
与window.my_interval=something
)中另外,如果
s没有在JavaScript中为var
s创建作用域,则函数会创建作用域。(在新的ES6中,让
和常量
,然后,是的,{}
s创建作用域。)@acdcjunior我明白了,但是代码应该可以清除间隔:-是啊,我也这么认为:D,可能还有别的事。也许那些如果没有被执行,我不知道…那不太可能是问题所在。当不使用var
时,变量将在范围内上升,在这种情况下,变量最终会击中窗口
(换句话说,在问题中my_interval=something
与window.my_interval=something
)中另外,如果
s没有在JavaScript中为var
s创建作用域,则函数会创建作用域。(在新的ES6中,让
和常量
,然后,是的,{}
s创建作用域。)@acdcjunior我明白了,但是代码应该可以清除间隔:-是啊,我也这么认为:D,可能还有别的事。如果没有执行
s,可能是那些,我不知道……一个相关的注意事项是:养成用var
或let
尽快声明变量的习惯——总有一天,你会感到毛骨悚然,因为两个不相关的函数一直在访问一个名为x
的讨厌变量,该变量由于你编写了x=something
不要在相关注释上写var x=something
:养成声明