javascript - 如何使此代码像 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);
}
}
我需要这个程序永久循环。
解决方案
您可以将代码添加到一个大函数中,然后执行以下操作:
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>
推荐阅读
- angular - tslint extension identifying non-deprecated version of subscribe as deprecated
- javascript - (MongoDB) Data submitted from user A is being sent into User B's document
- javascript - Can I use a
7
(number in a paragraph) as a value in JavaScript? - android - Triggering Skype call via Android app - 'Start Call' pop-up doesn't go away when call starts
- spring - Spring 5 with Spring-social reports java.lang.NoSuchMethodError: org.springframework.web.util.WebUtils.extractFullFilenameFromUrlPath
- docker - How do I test my Fluentd config in combination with Elasticsearch?
- java - ArrayBlockingQueue+synchronized in java
- reactjs - react-native(或仅反应)的非线性向导组件
- django - 如何将 django 连接到 kubernetes 中的 postgres?
- java - 识别 Java 字符串字符的小写或大写