如何运行一个javascript函数X秒?

How to run a javascript function X seconds?

我正在使用 setInterval 到 运行 一个 Javascript 函数,该函数在 div 中生成一个新的随机整数。当我点击 div 时,计时器开始计时。我在五秒后停止生成新数字时遇到问题。

使用setTimeout,我在5秒后隐藏了div;停止随机数,但我失去了 div.

如何有效地停止在 div 中生成数字而不隐藏它?

HTML:

<div id="div" onmousedown='F();'>Click here</div>

JS:

function F(){
    var div = document.getElementById("div");

    setInterval(function(){                 
        var number = Math.floor(Math.random()*28)   ;           
        div.innerHTML = number;
    }, 1000);


    setTimeout(function(){                  
        div.style.display = 'none';
    },5000);
};

只需使用计数器来跟踪间隔的滴答次数,然后使用 clearInterval 停止它:

var count = 0;
var intervalID = setInterval(function() {
    // generate your random number
    count++;
    if (count === 5) {
        clearInterval(intervalID);
    }
}, 1000);

仓促写的东西,但你想做的是跟踪你的间隔句柄,然后清除它。您可以使用 setTimeout

var forXsecs = function(period, func) {
  var handle = setInterval(func, 1000);
  setTimeout(function() { clearInterval(handle); }, period * 1000);
}

时机并不完美。马特的回答也行。

另一种选择是对 Matt 的回答略作改动,删除 setInterval 并仅使用超时。

var count = 0;
var forXsecs = function(period, func) {
    if(count < period) {
        func();
        count++;
        setTimeout(function() {forXsecs(period, func);}, 1000);
    } else {
        count = 0; //need to reset the count for possible future calls
    }
}

如果你只是想让它每秒 运行 一次,然后是 5 次,你可以这样做:

HTML:

<div id="5seconds"></div>

JS:

var count= 0;
setInterval(function(){
    if(count < 5){
        document.getElementById('5seconds').innerHTML = Math.random();
        count++
    }
},1000);

这将每秒生成一个随机数。直到 5 秒过去

您应该使用 clearInterval 来停止计时器。

为此,您传入从 setInterval 函数返回的计时器的 id(或 handle) (创建它)。

我建议从正在执行的函数中清除间隔计时器(使用 clearInterval)。

var elm = document.querySelector("div.container");
var cnt = 0;
var timerID;

function generateNumber()
{
  cnt += 1;
  elm.innerText = cnt;
  if (cnt >= 5) {
    window.clearInterval(timerID);
    
  }
}

timerID = window.setInterval(generateNumber, 1000);
.container {display:block; min-width:5em;line-height:5em;min-height:5em;background-color:whitesmoke;border:0.1em outset whitesmoke;}
<label>1s Interval over 5s</label>  
<div class="container"></div>