Javascript:使用clearInterval停止setInterval

Javascript:使用clearInterval停止setInterval,javascript,mapbox,Javascript,Mapbox,我在这里看到过很多次问这个问题(至少6次),答案从变量的不当使用到范围的不当。但是,我仍然无法获得clearInterval来停止计时器 我将在下面发布完整的代码-但我希望做一些非常简单的事情。我只是想让代码刷新一个图像(在mapbox中),直到选择另一个图像。将加载另一个图像,但计时器不会停止,因此它会不断刷新旧图像 我设置了一个名为“refreshtimerA”的全局变量来保存setInterval 在addKEWX_REFLECTIVITY_toA()中,此函数通过使用名为refreshK

我在这里看到过很多次问这个问题(至少6次),答案从变量的不当使用到范围的不当。但是,我仍然无法获得clearInterval来停止计时器

我将在下面发布完整的代码-但我希望做一些非常简单的事情。我只是想让代码刷新一个图像(在mapbox中),直到选择另一个图像。将加载另一个图像,但计时器不会停止,因此它会不断刷新旧图像

  • 我设置了一个名为“refreshtimerA”的全局变量来保存setInterval

  • 在addKEWX_REFLECTIVITY_toA()中,此函数通过使用名为refreshKEWXL2REFLECTIVITY_a()的嵌套函数运行计时器并刷新该窗口中的图像(它是天气图)。这很有效

  • 当用户激活函数addGOES_16_toA()时,它应该(正如我添加的)激活clearInterval(refreshtimerA);但这并不能阻止它

  • 我尝试了这么多的变化,在这里筛选,但我找不到一个有效的答案。我希望澄清这一点,因为我的整个项目完全因为一些简单的事情而陷入僵局。我的代码:

    编辑:链接到dropbox complete html/js示例:

    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>