我有这个带有功能警报的setinterval:
setInterval(function(){
alert('oo');
}, 5000);
Run Code Online (Sandbox Code Playgroud)
但是我想在每次间隔运行alert()时改变我的(5000)间隔 - 我想在5-10秒之间随机选择它.知道怎么做吗?
Cod*_*rPi 12
你可以这样做:
function myFunction() {
alert('oo');
setTimeout(myFunction, Math.random() * 5000)
}
myFunction()Run Code Online (Sandbox Code Playgroud)
您可以使用两种方法来完成此操作,即第一setTimeout和第二requestAnimationFrame。
以下是两者的完整示例。
随机间隔setTimeout
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();
}
Run Code Online (Sandbox Code Playgroud)
随机间隔使用requestAnimationFrame
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();
}
Run Code Online (Sandbox Code Playgroud)
这是如何调用它的示例
randomInterval((stop) => {
// do what you want...
if (stopCondition) {
stop();
}
}, 1000, 3000)
Run Code Online (Sandbox Code Playgroud)
您应该使用setTimeout设置执行函数的时间间隔.
function myFunction() {
var min = 5,
max = 10;
var rand = Math.floor(Math.random() * (max - min + 1) + min); //Generate Random number between 5 - 10
alert('Wait for ' + rand + ' seconds');
setTimeout(myFunction, rand * 1000);
}
myFunction()Run Code Online (Sandbox Code Playgroud)