代码之家  ›  专栏  ›  技术社区  ›  sqlchild

setInterval函数不停止但无限运行

  •  1
  • sqlchild  · 技术社区  · 7 年前

    请检查以下内容: http://jsfiddle.net/wmaokqh3/

    <div id="message">
    </div>
    <audio id="bgm" src="http://www.freesfx.co.uk/rx2/mp3s/9/10780_1381246351.mp3">
    </audio>
    
    <div id="count">
    </div>
    
    
    function Typer() {
      var dfd = $.Deferred();
      var srcText = 'EXAMPLE';
      var i = -(1);
      var result = '';
      setInterval(function() {
          if (i == srcText.length) {
            clearInterval(this);
            dfd.resolve();
          };
          $("#count").append('<br>i =' + i + ' , ');
          i++;
          result += srcText[i].replace("\n", "<br />");
          $("#message").html(result + '---' + i + ' , ');
        },
        1000);
      return dfd.promise();
    }
    function playBGM() {
      var playsound = $.Deferred();
      $('#bgm')[0].play();
      $("#bgm").on("ended", function() {
        playsound.resolve();
      });
      return playsound.promise();
    }
    function thirdFunction() {
      alert('third function');
    }
    Typer().then(playBGM).then(thirdFunction);
    
    3 回复  |  直到 7 年前
        1
  •  3
  •   epascarello    7 年前

    不知道你在哪里学的 clearInterval(this) 但这是不对的。这个 this 与当前间隔无关。您需要使用生成的间隔id来取消它。

    var myInterval = window.setInterval(  )
    

    在代码中需要使用该id

    clearInterval(myInterval)
    
        2
  •  1
  •   CertainPerformance    7 年前

    您必须分配 setInterval 要在以后清除变量,请执行以下操作:

    var result = '';
    const myInterval = setInterval(function() {
      if (i == srcText.length) {
        clearInterval(myInterval);
    
        3
  •  1
  •   AquaDev    7 年前

    所以编码中没有任何内容 clearInterval(this) clearInterval函数需要在paranthesis中有一个变量,为了给它一个变量,您应该将interval函数设置为如下所示的变量 var inter = window.setInterval(function() {}, 1000);