我如何在jQuery中切换setInterval函数的状态?

时间:2012-08-08 03:18:55

标签: javascript jquery

我希望能够点击一个id为pause的元素来开始计算时间对象中的元素,如果我再次点击暂停,它将停止它并重新点击启动它就像切换功能一样JQuery但是使用setInteval函数我该怎么做呢?

$("#pause").click(function(ffe) {
  if(on == true) {
    on = false 
    alert("on");
  }
  else {
    on = true;
    alert("off");
  }
  if(on == false) {
    setInterval(function() {
      $("#timet ul").append("<li>" + $("#time ul")
                    .children('li').length +"</li>");

    }, 100);
  }
  else {

    alert("Error");
  }
});

3 个答案:

答案 0 :(得分:5)

一种经典的技术是使用单个主setInterval循环,只需使用if..else逻辑来确定需要运行的内容。这就是很多javascript游戏的工作原理:

var on = true;

// Our master scheduler:
setInterval(function() {
    if (on) {
      $("#timet ul").append("<li>" + $("#time ul")
         .children('li').length +"</li>");
    }
}, 100);

// Code to handle the pause button
$("#pause").click(function(ffe) {
    on = !on;
}

答案 1 :(得分:1)

您可以使用setTimeout功能,如果您想运行该功能一次,setInterval连续运行,请尝试以下操作:

var on = false;
$("#pause").click(function(ffe) {
  if (on) {
      on = false;
      setTimeout(function() {
           $("#timet ul").append("<li>" + $("#time ul")
                    .children('li').length +"</li>");
      }, 100);
  } else {
      on = true; 
  }
});

答案 2 :(得分:1)

您需要使用.clearInterval()来停止执行。

以下是代码:( THE WORKING DEMO

$("#pause").click((function () {
    var interId = null;
    var $ul = $("#timet ul");
    return function (e) {
        if (interId) {
            $(this).text("start");
            clearInterval(interId);
            interId = null;
        } else {
            $(this).text("pause");
            interId = setInterval(function () {
                $ul.append($('<li>').text($('li', $ul).length));
            }, 100);
        }
    };
}()));​