如何停止嵌套在函数中的setInterval和该函数之外的clearInterval

How to stop a setInterval nested in a function with a clearInterval outside this function?

本文关键字:函数 clearInterval setInterval 何停止 嵌套      更新时间:2023-09-26

我很难弄清楚如何通过使用位于该函数外部的clearInterval来阻止嵌套函数中调用的Setinterval

Setinterval在DOM的第0层声明(这样说对吗?)它不能嵌套在函数中。

 function interval()
        {
           setInterval(function calcRealPos(){
               console.log("realPos="+realPos)
             realPos+=10;
              },500);
         }

函数interval()然后在函数中调用:

function move(distance)
{
   // Movement using translate
   if (distance==1933.67)
   {
        interval();
   }
 }

我想清除间隔每当有人按下'D'。清除间隔在另一个函数中,该函数也没有嵌套在任何其他函数中:

function releasebtn(event)
{
 var unpressBtn = event.keyCode;
 if(unpressBtn==68)
    {
       clearInterval(interval());
    }
 }

  document.addEventListener('keypress', pushbtn);
  document.addEventListener('keyup', releasebtn);

谢谢!

clearInterval接受setInterval区间的ID。你需要将interval ID存储在一个变量中,然后像这样传递给clearInterval:

function calcRealPos() { console.log('foo'); }
// Set the interval and store its ID
intId = setInterval(calcRealPos, 500);
// Later, when you want to clear the interval, use this
clearInterval(intId);

为了停止setInterval,您需要为它分配一个引用(在本例中是一个全局变量)。这是为了确保javascript知道要停止/清除哪个setInterval。

你的setInterval函数可以很容易地重写来显示这个

 function interval()
        {
           myinterval=setInterval(function calcRealPos(){
           console.log("realPos="+realPos)
           realPos+=10;
              },500);
         }

现在在你的releasetn函数中,你可以像

那样停止它
function releasebtn(event)
{
 var unpressBtn = event.keyCode;
 if(unpressBtn==68)
    {
       clearInterval(myinterval);
    }
 }