如何清除现有的setInterval?

SƲmmērAƥ

我有以下代码,用于启动和停止计时器。如果单击一次开始和停止,则效果很好。如果多次单击“开始”,如何停止“先前创建的” setInterval?

<html>
   <head>
      <script>
         var myVar;

         function myStartFunction() {
             myVar = setInterval(function () {
                 myTimer();
             }, 1000);
         }

         function myTimer() {
             var d = new Date();
             var t = d.toLocaleTimeString();
             document.getElementById("demo").innerHTML = t;
         }

         function myStopFunction() {
             clearInterval(myVar);
         }
      </script>
   </head>
   <body>
      <p id="demo"></p>
      <button onclick="myStopFunction()">Stop time</button>
      <button onclick="myStartFunction()">Start time</button>
   </body>
</html>
TJ人群

返回的值setInterval称为计时器句柄。如果要能够多次调用“启动”并同时运行多个计时器,则需要将句柄保存在数组中。

因此,例如,如果您想“停止”以停止您启动最后一个计时器:

var timers = [];

function myStartFunction() {
    timers.push(setInterval(function () {
        myTimer();
    }, 1000));
}

function myTimer() {
    var d = new Date();
    var t = d.toLocaleTimeString();
    document.getElementById("demo").innerHTML = t;
}

function myStopFunction() {
    if (timers.length > 0) {
        clearInterval(timers.pop());
    }
}

旁注:您不需要中的匿名函数myStartFunction,您可以直接使用myTimer

function myStartFunction() {
    timers.push(setInterval(myTimer, 1000));
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何以干净的方式派生现有的Meteorite包?

来自分类Dev

如何覆盖现有的.txt文件

来自分类Dev

如何更换现有的直放站

来自分类Dev

如何更新现有的.plist?

来自分类Dev

如何在IntelliJ中调用现有的IDE操作?

来自分类Dev

如何访问现有的NLog MemoryTarget

来自分类Dev

清除现有的iframe内容

来自分类Dev

如何从现有的JSON文件添加新的JSON

来自分类Dev

如何修改元素中现有的<content>?

来自分类Dev

如何停止现有的微调器

来自分类Dev

如何在现有的Hbase表上启用压缩?

来自分类Dev

如何使用现有的fork更新我的github库?

来自分类Dev

如何“重写”现有的vim键绑定?

来自分类Dev

如何在Dockerfile中使用现有的Docker Volume

来自分类Dev

如何使现有的C#库与UWP兼容?

来自分类Dev

如何为现有的Java组件添加新功能?

来自分类Dev

如何更新现有的断开连接的实体

来自分类Dev

它是不好的做法,新的阵列分配给现有的阵列,以“清除”在Java数组?

来自分类Dev

如何更新现有的Office插件?

来自分类Dev

如何跟踪现有的ansible项目

来自分类Dev

如何清除Flask中现有的Flash消息

来自分类Dev

清除现有的iframe内容

来自分类Dev

如何停止现有的微调器

来自分类Dev

如何升级现有的graphenedb实例?

来自分类Dev

如何打开现有的LXD容器?

来自分类Dev

Ubuntu 16.04“升级”清除了现有的15.10安装

来自分类Dev

调整现有的VBA宏代码以清除列,调整行高和自动调整列

来自分类Dev

如何启动现有的 Django 项目?

来自分类Dev

如何修改现有的python文件