Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript clearInterval不会停止间隔_Javascript_Jquery_Html - Fatal编程技术网

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
:养成声明