jquery 在启动新的setInterval之前清除setInterval

mgdq6dx1  于 2023-08-04  发布在  jQuery
关注(0)|答案(1)|浏览(130)

我正在编写一个tower of河内游戏,在这个游戏中,每当一个div或者在我的例子中是一个形状被拖动时,计时器都应该重置。但问题是,当我第二次调用setInterval函数时,计数器开始重叠。我想要的是旧的计时器被清除,最新的计时器继续运行。

function timer() {
    var timeleft = 10;
    var downloadTimer = setInterval(function () {
      if (timeleft <= 0) {
        clearInterval(downloadTimer);
        alert("Game over! You ran out of time\nPlay again ?");
        location.reload();
      } else {
        timeleft -= 1;
        document.getElementById("timer").innerHTML = timeleft;
      }
    }, 1000);
  }

字符串
这是setInterval函数的代码。

function Drag() {
    $(".draggable").draggable({
      stack: $(".draggable"),
      helper: "clone",
      start: function () {
        timer();
        var parentNode = "#" + this.parentNode.id;
        platforms.push(parentNode);
        var shape = "#" + this.id;
        sequence.push(shape);
        var shapeParent = this.closest(".holder").id;
        shapeParent = "#" + shapeParent;
      },
    });
  }


这就是我调用timer/setInterval函数的地方

iugsix8n

iugsix8n1#

同步性与你的问题无关。你只是在开始一个新的间隔之前没有清除间隔。

  • 在函数外部定义超时变量
  • 也可以在拖动start方法中清除它-或者只是在timer()函数的顶部清除它:
// Define it in the outer scope
var downloadTimer;

function timer() {

    // Clear ongoing (if any)
    clearInterval(downloadTimer);

    var timeleft = 10;
    downloadTimer = setInterval(function () {
      if (timeleft <= 0) {
        // Clear when game over
        clearInterval(downloadTimer);
        alert("Game over! You ran out of time\nPlay again ?");
        location.reload();
      } else {
        timeleft -= 1;
        document.getElementById("timer").innerHTML = timeleft;
      }
    }, 1000);
}

function Drag() {
    $(".draggable").draggable({
      stack: $(".draggable"),
      helper: "clone",
      start: function () {

        // Optionally you can clear it here:
        // clearInterval(downloadTimer);

        timer();
        var parentNode = "#" + this.parentNode.id;
        platforms.push(parentNode);
        var shape = "#" + this.id;
        sequence.push(shape);
        var shapeParent = this.closest(".holder").id;
        shapeParent = "#" + shapeParent;
      },
    });
  }

字符串

相关问题