如何动态杀死区间函数

时间:2017-11-11 05:06:41

标签: javascript jquery

您能否请一看这段代码,如果有办法检查天气setInterval()是否真的被杀或仍然在后台处理中运行,请告诉我?

从技术上讲,我需要做的是每当.map不在页面中时就杀死JS setinerval。我的理解是setInterval()仍在运行2秒,因为if语句

而没有在控制台上写



setInterval(
  function() {
    if ($(".map")[0]) {
      console.log("Map is in the Page");
    } else {
     //Stop Inreval
    }
  }, 2000);
  
  setTimeout(function(){ $(".box").empty(); 
  }, 9000);

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="box">
  <div class="map">Map in Here</div>
</div>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:1)

您需要调用clearInterval()来停止执行间隔函数。

以下是一个例子:

let i = 3;

let interval = setInterval(function() {
  if (i > 0) {
    console.log("Running " + i--);
  } else {
    clearInterval(interval);

    console.log("Stopped");
  }
}, 2000);

答案 1 :(得分:1)

为了终止间隔或超时,您应该将其分配给变量以进行引用。具体功能包括:clearInterval(您的间隔参考变量名称)和clearTimeout(您的超时参考变量名称)。

var yourInterval = setInterval(
  function() {

    console.log("Still running?"); //for testing purpose.

    if ($(".map")[0]) {
      console.log("Map is in the Page");
    } else {
      clearInterval(yourInterval); //it kills this interval, if the interval already terminated, it won't do anything harm, nor produce an error message in the browser console.
    }
  }, 2000);
  
  setTimeout(function(){ $(".box").empty(); 
  }, 9000);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="box">
  <div class="map">Map in Here</div>
</div>