setInterval函数没有停止但是无限运行

时间:2018-04-04 04:04:09

标签: javascript jquery setinterval

请查看以下内容: 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 个答案:

答案 0 :(得分:3)

不确定您在哪里学习clearInterval(this),但这不正确。 this与当前间隔无关。您需要使用生成的间隔ID来取消它。

var myInterval = window.setInterval(  )

在您的代码中,您需要使用该ID

clearInterval(myInterval)

答案 1 :(得分:1)

您必须将setInterval分配给变量才能在以后清除它:

var result = '';
const myInterval = setInterval(function() {
  if (i == srcText.length) {
    clearInterval(myInterval);

答案 2 :(得分:1)

因此编码中没有任何内容clearInterval(this) clearInterval函数需要一个变量在paranthesis中为了给它一个变量你应该将interval函数设置为一个变量,该变量应该是这样的var inter = window.setInterval(function() {}, 1000);