用于在每个

时间:2017-10-02 18:39:24

标签: javascript jquery html function loops

我正在尝试创建一个函数,单击按钮将启动每个函数的循环,每个函数之间有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

目前,代码在执行第一个函数后停止。它似乎只在第一个元素上循环(如果你手动点击另一个链接,它会强制回到集合中的第一个元素)。
提前谢谢。

3 个答案:

答案 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();
  }
}