首页 > 解决方案 > 如何使此代码像 while(true) 一样永久循环?

问题描述

我创建了一台打字机,它工作正常。唯一的问题是我无法使代码循环。有什么简单的方法可以做到吗?我的错误在哪里?我想它不会循环,因为如果我进行循环,它比函数中的延迟“更快”。

我的代码是 JavaScript。我希望它永久循环,但我也尝试了正常的 for 循环,即使那样它也不会循环。

var today = new Date();
var dd = today.getDate();
var mm = today.getMonth() + 1; //January is 0!
var yyyy = today.getFullYear();

if (dd < 10) {
  dd = '0' + dd;
}

if (mm < 10) {
  mm = '0' + mm;
}

today = dd + '/' + mm + '/' + yyyy;

var i = 0;
var txt = 'welcome to IDM...' + today + "!";
var speed = 50;
var t = true;
var loopTime = 50; // How often in milliseconds the loop should 
//be run
var intervalId = setInterval(typeWriter(), 50);

function typeWriter() {
  if (i < txt.length) {
    document.getElementById("demo").innerHTML += txt.charAt(i);
    i++;

    setTimeout(typeWriter, speed);

  } else {
    k = txt.length;
    (function theLoop(k) {
      setTimeout(function() {
        document.getElementById("demo").innerHTML =
          txt.substring(0, k);
        if (k--) {
          i--;
          // If i > 0, keep going
          theLoop(k); // Call the loop again, 
          //and pass it the current value of i
        }
      }, 200);
    })(txt.length);
  }

}

我需要这个程序永久循环。

标签: javascriptloops

解决方案


您可以将代码添加到一个大函数中,然后执行以下操作:

function largeFunction() {
  // Add code here
}

var loopTime = 50; // How often in milliseconds the loop should be run
var intervalId = setInterval(largeFunction, loopTime);

这是一个运行的小例子setInterval

var count = 0;

function largeFunction() {
  document.querySelector("#count").textContent = count++;
}

var loopTime = 1E3;
var intervalId = setInterval(largeFunction, loopTime);
<div id="count"></div>

此外,如果您想停止循环,只需调用clearInterval(intervalId);

我想这就是你所要求的:

var today = new Date();
var dd = today.getDate();
var mm = today.getMonth() + 1; //January is 0!
var yyyy = today.getFullYear();

if (dd < 10) {
  dd = '0' + dd;
}

if (mm < 10) {
  mm = '0' + mm;
}

today = dd + '/' + mm + '/' + yyyy;

var txt = 'welcome to IDM...' + today + "!";
var size = 0, mode = 1, speed = 50;
var intervalId = setInterval(loop, speed);

function loop() {
  if (size <= 0) {
    mode = +1;
    size = 0;
  } else if (size >= txt.length - 1) {
    mode = -1;
    size = txt.length - 1;
  }
  size += mode;
  document.getElementById("demo").innerHTML = txt.substring(0, size);
}
<div id="demo"></div>


推荐阅读