javascript - 使用按钮启动/停止 setTimeout 并防止点击次数越多计数速度越快

标签 javascript recursion settimeout

我正在使用 JavaScript,并使用 setTimeout 函数来进行计数。这是我的代码...

<button id="star">Start</button>
<p id="time">0</p>
var timeEl = 0;

function start() {
    time();
}

function time() {
    setTimeout(function() {
        timeEl = timeEl + .1;
        timeEnd = timeEl.toFixed(1);
        document.getElementById("time").innerHTML = timeEnd;
        time();
    }, 100);
}

var el = document.getElementById("star");
el.addEventListener("click", star, false);
  1. 如何让 setTimeout 函数在单击按钮时启动停止

  2. 如何防止点击按钮次数越多,计数速度就越快。

我在下面包含了我的 JSFiddle! https://jsfiddle.net/pb4759jh68/0618eLoe/

最佳答案

要停止计时器,您可以使用 clearTimeout(),但它确实需要使用 setTimeout() 创建的计时器的 ID。现在,对 setTimeout() 的调用会将计时器 ID 保存在 timeOut 中,然后在 start() 中检查 timeOut 的内容code> 查看计时器当前是否正在运行。如果计时器正在运行,则在 clearTimeout(timeOut); 中使用 timeOut

var timeEl = 0;
var timeOut = null;
function start()
{
  if(timeOut !== null){
    clearTimeout(timeOut);
    timeOut = null;
  }else{
    time();
  }
}
function time()
{
  timeOut = setTimeout(function()
  {
    timeEl = timeEl + .1;
    timeEnd = timeEl.toFixed(1);
    document.getElementById("time").innerHTML = timeEnd;
    time();
  }, 100);
}

var el = document.getElementById("star");
el.addEventListener("click", start, false);

我希望这段代码可以解决这个问题

JSFiddle

使用 setInterval 和clearInterval 也可以实现同样的效果。试试这个 JSFiddle

关于javascript - 使用按钮启动/停止 setTimeout 并防止点击次数越多计数速度越快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36733692/

相关文章:

java - 需要修复我的递归代码(get 需要返回 int 或 stackoverflow 错误)

Node.JS:不保持进程运行的setTimeout

javascript - setTimeout 执行的函数叫什么?

javascript - NTLM 身份验证后站点的 NodeJs 身份验证

javascript - 删除条目后重新排序本地存储

javascript - 当使用 React 单击另一个详细信息时,如何自动关闭打开的详细信息标签?

javascript - 如何使用 Javascript/jQuery 和不区分大小写的文本或搜索字段动态显示/隐藏 div(在 KeyUp、iTunes 风格上)

java - java 递归子字符串搜索

c# - 如何优化递归函数的 Reactive 实现

javascript - 如何在 javascript 中使用 setTimeout 考虑延迟