我正在尝试创建一个函数,单击按钮将启动每个函数的循环,每个函数之间有5秒的延迟并无限循环,直到再次单击该按钮。我接近这个,但是在5秒之后,它只是执行集合中的最后一个函数(星期二),并且不会在每个函数之间延迟迭代它们。
function links() {
safety
daily
monday
tuesday
}
var intervalId;
function toggleIntervalb() {
if (!intervalId) {
intervalId = setTimeout(links, 5000);
} else {
clearInterval(intervalId);
intervalId = null;
}
}
function safety(){
document.getElementById("fires").style.display = 'none';
document.getElementById("safety").style.display = 'block';
document.getElementById("daily").style.display = 'none';
document.getElementById("monday").style.display = 'none';
document.getElementById("tuesday").style.display = 'none';
}
function daily(){
document.getElementById("fires").style.display = 'none';
document.getElementById("safety").style.display = 'none';
document.getElementById("daily").style.display = 'block';
document.getElementById("monday").style.display = 'none';
document.getElementById("tuesday").style.display = 'none';
}
function monday(){
document.getElementById("fires").style.display = 'none';
document.getElementById("safety").style.display = 'none';
document.getElementById("daily").style.display = 'none';
document.getElementById("monday").style.display = 'block';
document.getElementById("tuesday").style.display = 'none';
function tuesday(){
document.getElementById("fires").style.display = 'none';
document.getElementById("safety").style.display = 'none';
document.getElementById("daily").style.display = 'none';
document.getElementById("monday").style.display = 'none';
document.getElementById("tuesday").style.display = 'block';
**第二次尝试: 更接近这个(包括按钮) jsfiddle新手 - 无法让我的代码在这里工作:https://jsfiddle.net/unqrhxtp/16
所以,我也包括了pastebin(保存为.html并打开):https://pastebin.com/EwHVqmHJ
目前,代码在执行第一个函数后停止。它似乎只在第一个元素上循环(如果你手动点击另一个链接,它会强制回到集合中的第一个元素)。
提前谢谢。
答案 0 :(得分:2)
更改此行:
public static Double[][] box(double unboxed[][]) {
return Arrays.stream(unboxed).map(Boxer::box).toArray(Double[][]::new);
}
public static double[][] unbox(Double boxed[][]) {
return Arrays.stream(boxed).map(TmpTest::unbox).toArray(double[][]::new);
}
从setTimeout到setInterval的可能会修复
intervalId = setTimeout(links, 5000);
在阅读更新后的问题后,我认为这样的问题可以解决您的问题:
intervalId = setInterval(links, 5000);
答案 1 :(得分:0)
你应该使用setInterval,因为setTimeout在给定时间之后运行意味着它正常工作,因为。如果您逐步运行此代码,那么您可以看到我在说什么。当光标在settimeout上时,你的函数不能立即工作,它将等待5秒。 我希望我能帮忙
答案 2 :(得分:0)
我设法提出了一个解决方案,虽然我对此并不满意。主要是因为它迫使我在循环开始之前等待整整90秒。现在,这样做,但我会保持开放,希望有人会发布更好的解决方案。
//Loop through links upon click
function cyclelinks() {
setTimeout(safety, 10000);
setTimeout(daily, 20000);
setTimeout(monday, 30000);
setTimeout(tuesday, 40000);
setTimeout(wednesday, 50000);
setTimeout(thursday, 60000);
}
var intervalId;
function toggleInterval() {
var btn = document.getElementById("logo");
if (!intervalId) {
intervalId = setInterval(cyclelinks, 90000);
} else {
clearInterval(intervalId);
intervalId = null;
location.reload();
}
}