首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript中具有随机时间的集区间

JavaScript中具有随机时间的集区间
EN

Stack Overflow用户
提问于 2016-01-07 13:47:21
回答 5查看 26.3K关注 0票数 7

我有一个带有函数警报的设置间隔:

代码语言:javascript
复制
setInterval(function(){
    alert('oo');
}, 5000);

但是,我想改变我的(5000)间隔,每次运行警报()-我想让它随机选择5-10秒。我该怎么做呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2016-01-07 13:56:53

您应该使用setTimeout来设置执行函数的间隔。

代码语言:javascript
复制
function myFunction() {
  var min = 5,
    max = 10;
  var rand = Math.floor(Math.random() * (max - min + 1) + min); //Generate Random number between 5 - 10
  console.log('Wait for ' + rand + ' seconds');
  setTimeout(myFunction, rand * 1000);
}

myFunction()

票数 23
EN

Stack Overflow用户

发布于 2016-01-07 13:52:56

你可以这样做:

代码语言:javascript
复制
function myFunction() {
  alert('oo');
  setTimeout(myFunction, Math.random() * 5000)
}

myFunction()

票数 11
EN

Stack Overflow用户

发布于 2020-09-27 10:34:31

您可以使用两个方法来完成这个任务,第一个是setTimeout方法,第二个方法是requestAnimationFrame方法。

以下是这两方面的完整例子。

setTimeout随机区间

代码语言:javascript
复制
function randomInterval(callback, min, max) {
    let timeout;

    const randomNum = (max, min = 0) => Math.random() * (max - min) + min;

    const stop = () => clearTimeout(timeout)

    const tick = () => {
        let time = randomNum(min, max);
        stop();

        timeout = setTimeout(() => {
            tick();
            callback && typeof callback === "function" && callback(stop);
        }, time)
    }

    tick();
}

使用requestAnimationFrame的随机间隔

代码语言:javascript
复制
function randomInterval(callback, min, max) {
    const randomNum = (max, min = 0) => Math.random() * (max - min) + min;

    let targetTime = randomNum(min, max);
    let lastInvoke = performance.now();

    const stop = () => targetTime = null

    const tick = () => {
        if (!targetTime) return;

        if (performance.now() - lastInvoke > targetTime) {
            lastInvoke = performance.now();
            targetTime = randomNum(min, max);
            callback && typeof callback === "function" && callback(stop);
        }

        requestAnimationFrame(tick)
    }

    tick();
}

下面是一个如何将其称为

代码语言:javascript
复制
randomInterval((stop) => {
    // do what you want...

    if (stopCondition) {
        stop();
    }
}, 1000, 3000)
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34656758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档