Javascript:使用clearInterval停止setInterval
我在这里看到过很多次问这个问题(至少6次),答案从变量的不当使用到范围的不当。但是,我仍然无法获得clearInterval来停止计时器 我将在下面发布完整的代码-但我希望做一些非常简单的事情。我只是想让代码刷新一个图像(在mapbox中),直到选择另一个图像。将加载另一个图像,但计时器不会停止,因此它会不断刷新旧图像Javascript:使用clearInterval停止setInterval,javascript,mapbox,Javascript,Mapbox,我在这里看到过很多次问这个问题(至少6次),答案从变量的不当使用到范围的不当。但是,我仍然无法获得clearInterval来停止计时器 我将在下面发布完整的代码-但我希望做一些非常简单的事情。我只是想让代码刷新一个图像(在mapbox中),直到选择另一个图像。将加载另一个图像,但计时器不会停止,因此它会不断刷新旧图像 我设置了一个名为“refreshtimerA”的全局变量来保存setInterval 在addKEWX_REFLECTIVITY_toA()中,此函数通过使用名为refreshK
var refreshtimerA;
函数clearAllPaneA(){
setLayoutProperty('overlay_KEWX_L2_reflective','visibility','none');
setLayoutProperty('overlay_GOES_16_CH02','visibility','none');
document.getElementById(“reflectivityBar”).style.visibility=“visible”;
}
函数addKEWX_反射率_toA(){
clearAllPaneA();
refreshtimerA=setInterval(refreshKEWXL2REFLECTIVITY_A,5000);//5秒持续刷新(与代码一样工作)
setLayoutProperty('overlay_KEWX_L2_反射率'、'可见性'、'可见');
document.getElementById(“ReflectivityBar”).style.visibility=“visible”;
函数refreshkewxl2反射性_A(){
topleftmapbox.removeLayer('overlay_KEWX_L2_REFLECTIVITY');
removeSource('source_KEWX_L2_反射率');
topleftmapbox.addSource(“源反射率”{
“类型”:“图像”,
“url”:“images/KEWX_L2_REFLECTIVITY.gif”,
“坐标”:[
[-103.009641, 33.911],
[-94.009641, 33.911],
[-94.009641, 24.911],
[-103.009641, 24.911]
]
})
var layers=topleftmapbox.getStyle().layers;
//查找地图样式中第一个符号图层的索引
第一符号变量;
对于(变量i=0;i
在替换refreshtimerA
的值之前,必须确保调用了clearInterval
,例如:
<li><a title="" onclick="addGOES_16_toA(); addKEWX_REFLECTIVITY_toA();">GOES-16 then MRMS</a></li>
GOES-16然后是MRMS
这个例子能帮你解决这个问题吗
var t;//计时器id
var buttonStart=document.querySelector(“开始”);
var buttonStop=document.querySelector(“停止”);
var timerDiv=document.querySelector(“计时器”);
buttonStart.onclick=函数(){
timerDiv.innerText=“等待3秒…”;
t=设置超时(函数(){
timerDiv.innerText=“确定”;
t=零;
}, 3000);
}
buttonStop.onclick=函数(){
if(t){
清除超时(t);
t=零;
timerDiv.innerText=“停止”;
}否则{
timerDiv.innerText=“它没有计时器”;
}
}
unset
您应该强烈考虑在编写代码时使用缩进,这将使阅读和调试变得容易得多。(大量重复的换行也没有多大帮助)是否有可能多次调用addKEWX_REFLECTIVITY_toA(),而中间不调用addGOES_16_toA(),从而用新值覆盖变量refreshTimerA?我在这里还是新手,如果不将其格式化为4个字符,我无法获取要发布的代码。所以我把它放到记事本上就是为了发布这个。一旦我知道如何做得更好,我就可以在这里缩进了。在发布之前,我丢失了一些格式。addKEWX\u reflective\u toA
在您的代码中从未调用addKEWX\u reflective\u toA()只能调用一次,因此我知道这不起作用。这似乎不起作用。我调用addKEWX_REFLECTIVITY_toA(),然后调用addGOES_16_toA()。在addGOES_16_toA()中发生任何事情之前,它会立即调用clearInterval。我甚至没有addGOES_16_toA()中的工作代码来干扰这一点。我无法让计时器在任何情况下停止。我还尝试了另一个名为stopTimer的函数,该函数调用clearInterval,并且仅此而已。但是它仍然没有停止。我不知道你在说什么。。addGOES\u 16\u toA
的代码发布在您的问题中,包括clearInterval(refreshtimerA)
,这里讨论的addKEWX\u REFLECTIVITY\u toA
代码包含对refreshtimerA
的赋值,我要说明的是,在赋值新值之前必须调用clearInterval+我从dropbox链接添加了一个与HTML相关的代码示例。。。如果你有不同的问题,请以一种可以回答的方式阐述你的问题,谢谢是的,谢谢!我尝试了你告诉我的,但我在过程中添加了一个语法错误,导致它仍然失败。你帮我解决了这个问题,谢谢!现在,这项工作非常有效。
<li><a title="" onclick="addGOES_16_toA(); addKEWX_REFLECTIVITY_toA();">GOES-16 then MRMS</a></li>