【问题标题】:How can I run a function only for a period of time? javascript我怎样才能只在一段时间内运行一个函数? javascript
【发布时间】:2021-03-05 20:15:05
【问题描述】:

所以我制作了一个有趣和练习的应用程序......在应用程序中,我需要一个只运行特定时间(如 1 分钟或 15 分钟)然后重新启动到主要统计数据的函数。

我注意到我不知道如何让某个函数运行一段时间然后它又回来了。

在我搜索并尝试了几个小时之后,这就是我所做的:

function start() {
  let div = document.createElement('div');
  div.id = 'div'

  let button1 = document.createElement('button');
  button1.type = 'button';
  button1.className = 'btn btn-warning col-5 mt-1 mr-5';
  button1.innerHTML = 'I did it!';
  button1.id = 'button1';
  button1.onclick = function didit() {
    alert(' I did it!')
    // earn exp
    // next img
  }

  let button2 = document.createElement('button');
  button2.type = 'button';
  button2.className = 'btn btn-warning col-5 mt-1';
  button2.innerHTML = 'Não Consegui :(';
  button2.id = 'button2';
  button2.onclick = function giveup() {
    alert('giveup')
    //earn 0 exp
    //next img
  }

  div.appendChild(button1);
  div.appendChild(button2);

  let button = document.getElementById('button');

  button.before(div);
  button.remove();

  // restart

  setTimeout(restart(), 1 * 60 * 1000);
}

function restart() {
  let button3 = document.createElement('button');
  button3.type = 'button';
  button3.className = 'btn btn-warning col-12 mt-1 mr-5';
  button3.onclick = function start();
  button3.innerHTML = 'Start';
  button3.id = 'button';

  let div = document.getElementById('div');

  div.before(button);
  div.remove();
}
<button type="button" class="btn btn-warning col-12 mt-1 mr-5 ml-0" onclick="start()" id="button">Start</button>

我认为应该是这样的。但我收到一个错误:/ 如果它太大了,请见谅。

【问题讨论】:

  • setTimeout() 的第一个参数应该是函数名,而不是对函数的调用。
  • 嗨,有趣的是,您遇到了什么错误?也许在setTimeout(restart, delay) 中传递函数,而不是立即用restart() 调用函数developer.mozilla.org/en-US/docs/Web/API/…
  • setTimeout 有一段时间没有运行函数。它等待这段时间,然后运行该函数。
  • 您应该做的是在用户开始游戏时将时间保存在一个变量中。然后,事件侦听器可以检查当前时间是否小于开始时间的 15 分钟。如果是在超时之后,他们什么都不做。
  • 您也可以使用setTimeout() 来运行禁用按钮的功能。

标签: javascript function set timeout


【解决方案1】:

如 cmets 中所述,setTimeout 接受函数和以毫秒为单位的延迟时间作为参数。
在 Javascript 中,您可以仅通过名称将函数作为任何其他变量传递,具有:

let secondsBeforeRestart = 60
setTimeout(restart, secondsBeforeRestart * 1000);

另外,不确定1 * 60 * 1000 是什么意思。只要有一个存储秒的参数。这样你总是可以理解代码。即使在 6 个月后。

【讨论】:

  • 1 * 60 * 1000 只是将毫秒传递到 1 分钟,然后我会让它动态化!
  • 但我想我做到了!我所做的只是尝试在 setTimeout 中调用函数 restart(){ .....} 执行“setTimeout(restart() , secondsBeforeRestart * 1000)”,而是将其放入执行 setTimeout(function restart() { .......} , secondsBeforeRestart * 1000)
  • 在我在重启函数中出现错误之前,我做了 button3.onclick = function start();试图调用 start() 函数试图创建一个循环,但我评论并且它工作它,调用自己
猜你喜欢
  • 2018-07-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-24
  • 2021-10-02
  • 2011-03-29
  • 1970-01-01
  • 2015-02-23
  • 1970-01-01
相关资源
最近更新 更多