试图搜索这样的东西,但是如果已经在某处已经回答过那么对不起就找不到确切的内容。
我需要在一段时间内运行一些代码 , 一段时间。 基本上我想在页面上快速显示一个数组中的随机值,我想让它继续显示1分钟然后停止。
下面的代码只会在3秒后开始,并且不会停止,我不知道如何实现这一点,所以任何帮助都非常感激。
var messages = ["Good!", "Great!", "Awesome!", "Super!", "Nice!"];
function getMessage() {
return messages[Math.floor(Math.random() * messages.length)];
}
setTimeout(function () { oneSecondFunction(); }, 3000);
function oneSecondFunction() {
$('#test').html(getMessage());
setTimeout('oneSecondFunction()', 100);
}
由于
答案 0 :(得分:1)
为设置标志的结束时间设置第二个超时,如果未设置标志,则仅重新安排oneSecondFunction
:
var messages = ["Good!", "Great!", "Awesome!", "Super!", "Nice!"];
var stop = false;
function getMessage() {
return messages[Math.floor(Math.random() * messages.length)];
}
setTimeout(function () {
setTimeout(function () { stop = true; }, 60000); // one minute later
oneSecondFunction();
}, 3000);
function oneSecondFunction() {
$('#test').html(getMessage());
if (!stop) {
setTimeout('oneSecondFunction()', 100);
}
}
答案 1 :(得分:1)
记录自首次运行该功能以来已经过了多长时间,以及当该时间段大于一分钟时,只需不要续订setTimeout
来电。
例如:
var timeStarted;
function getMessage() {
return messages[Math.floor(Math.random() * messages.length)];
}
setTimeout(function () { oneSecondFunction(); }, 3000);
function oneSecondFunction() {
var now = Date.now();
timeStarted = timeStarted || now;
$('#test').html(getMessage());
if (now - timeStarted < 60000) {
setTimeout(oneSecondFunction, 100); // you can just write function's name
}
}
答案 2 :(得分:1)
尝试
var messages = ["Good!", "Great!", "Awesome!", "Super!", "Nice!"];
function getMessage() {
return messages[Math.floor(Math.random() * messages.length)];
}
var interval = null;
setTimeout(function() {
interval = setInterval(function() {
// Your code here
$("#test").html(getMessage());
}, 100);
//Stop the functions after 1 minute.
setTimeout(function() { clearInterval(interval); }, 60 * 1000);
}, 3000);
这将在3秒后创建一个间隔,该间隔将每100毫秒执行一次代码1分钟。
答案 3 :(得分:1)
您只需要跟踪该功能运行的时间。然后测试时间是否结束。这是一个如何做到这一点的例子。
var messages = ["Good!", "Great!", "Awesome!", "Super!", "Nice!"],
interval = 100,
delay = 0;
function getMessage() {
return messages[Math.floor(Math.random() * messages.length)];
}
setTimeout(oneSecondFunction, 3000); // Less code is better.
function oneSecondFunction() {
$('#test').html(getMessage());
delay+= interval;
if (delay < (3 * 60 * 1000)) { // 3 minutes
setTimeout(oneSecondFunction, interval);
}
}
答案 4 :(得分:0)
你不应该从oneSecondFunction setTimeout来实现make循环。而是使用setInterval函数并传递要调用的函数以及要睡眠的时间。然后使用区间ID调用clearInterval来停止它。像这样:
function getMessage() {
return messages[Math.floor(Math.random() * messages.length)];
}
function oneSecondFunction() {
$("#test").html(getMessage());
}
var intervalID = setInterval(oneSecondFunction, <Delay between runs in millis here>);
function stop() {
clearInterval(intervalID);
}
setTimeout(stop, 60000);