【问题标题】:Making a timer using setInterval function in javascript but haveing problem with it in Javascript [duplicate]在javascript中使用setInterval函数制作计时器,但在Javascript中出现问题[重复]
【发布时间】:2021-10-30 01:51:26
【问题描述】:

我正在使用 JavaScript 中的setInterval 函数制作计时器。

我做了一个设置按钮和一个删除按钮,按下它时将设置/删除间隔。

这是我的代码:

    var interval;
    function sets(){
      interval = setInterval(function(){
       document.querySelector('div').textContent = 
        parseFloat(document.querySelector('div').textContent)+1; 
      },1000);
     };
    function del(){
      window.clearInterval(interval);
      document.querySelector('div').textContent = 0;
    };
    <button onclick = 'sets()'>Set</button>
    <button onclick = 'del()'>Delete</button>
    <div>0</div>

我发现当我一直按下设置按钮时,div.textContent 会随着我按下设置按钮的次数越来越快。

有谁知道为什么会发生这种情况,有没有一些方法可以避免它,而无需将两个按钮合二为一?

感谢您的帮助和回复。

【问题讨论】:

  • 因为您每次都在创建新的间隔之前清除任何以前的间隔,只需在创建新间隔之前执行clearInterval(interval)
  • 按下设置按钮开始一个新的间隔。在开始使用 sets() 函数之前清除任何现有间隔

标签: javascript html button setinterval


【解决方案1】:

如果interval 已分配,您可以清除之前的时间间隔

var interval;

function sets() {

  // Here you can check if the interval is assigned already
  // If assigned, use del() to clear it
  if (interval) {
    del()
  }

  interval = setInterval(function() {
    document.querySelector('div').textContent =
      parseFloat(document.querySelector('div').textContent) + 1;
  }, 1000);
};

function del() {
  window.clearInterval(interval);
  document.querySelector('div').textContent = 0;
  interval = null;
};
<button onclick='sets()'>Set</button>
<button onclick='del()'>Delete</button>
<div>0</div>

【讨论】:

  • 一旦开始,if(interval) 检查将永远不会再次为假。您永远不会重置 interval 变量。清除间隔不会自动重置 interval 变量。
  • 我用错了术语。更新答案
  • @HarunYilmaz 没有错误的术语。 if 在原始帖子中几乎没有用。请注意,单击Set 按钮时的resetting 只是众多选项之一。另一种方法是忽略点击。肖恩应该指定应该发生的事情。此外,没有“对 inveral 对象的引用”;甚至没有区间对象。 setInterval 返回一个标识定时器的整数,仅此而已。
  • @Shawn 不,interval = null 使 if(interval) 不通过。
  • @Sebastian Simon,对不起,我对你的评论感到困惑,你说interval = null 使if(interval)不通过,那么del()如何在set()函数中被调用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-03
  • 2023-03-11
  • 2018-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多