【发布时间】:2026-01-05 05:30:01
【问题描述】:
我已经设置了一些功能。 一个是打字效果,一个是段落效果,另一个是添加“ ”,一个是终端中的闪烁光标。所有这些都会改变 div 的 innerHTML。
当页面加载时,函数 Start() 内部有大约 10 个函数,它们组成了一系列应该发生的事情:文本写入、光标开始闪烁、段落、再次写入文本等。
问题是,它们都同时执行,除非我在 Start() 函数中对每个都使用 setTimeout()。这有点搞砸了,因为我必须为每个函数定义一个开始时间。
编辑:这里没有 JQuery。只是JavaScript。 这是我的整个 JS 文件:
ctrl = 0;
y=0;
block = 0;
test = "";
first_time = 1;
function typing(id, sentence){
var index=0;
var intObject= setInterval(function() {
document.getElementById(id).innerHTML+=sentence[index];
index++;
if(index==sentence.length){
clearInterval(intObject);
}
}, 100);
}
function paragraph(x){
while(x>0){
document.getElementById("container").innerHTML+="<br>";
x--;
}
}
function advance(x){
while(x>0){
document.getElementById("container").innerHTML+=" ";
x--;
}
}
function blink(y){
if(first_time == 1){ctrl = y; first_time=0;}
if(ctrl!=0){
if(block=='0'){
test = document.getElementById("container").innerHTML;
document.getElementById("container").innerHTML+="\u258B";
block=1;
}
else if(block=='1'){
document.getElementById("container").innerHTML=test;
block=0;
}
ctrl--;
setTimeout("blink(y);", 300);
}
if(ctrl==0){first_time=1;}
}
function start(){
typing('container','Subject Name:');
setTimeout("blink('4');",1700);
setTimeout("typing('container',' Carlos Miguel Fernando');",2800);
setTimeout("blink('6');",5600);
setTimeout("paragraph('1');",7200);
setTimeout("blink('8');",7400);
setTimeout("typing('container','Age: 21');",9500);
setTimeout("blink('4');",10800);
setTimeout("paragraph('1');",12800);
setTimeout("blink('4');",13200);
setTimeout("typing('container','Location: Povoa de Varzim, Portugal');",14500);
setTimeout("blink('14');",19000);
setTimeout(function(){document.getElementById("more").style.display="block";}, 23000);
setTimeout("typing('more','Find Out More');",24000);
}
【问题讨论】:
-
除了将字符串传递给超时非常可怕之外,解决方案在很大程度上取决于您的函数。它们似乎是异步的,因此您必须使用回调或承诺。也许你需要一个动画队列。如果你不介意,你可以看看 jQuery,你已经实现了所有这些机制。
-
问题比看起来更复杂。我建议你学习 JavaScript 中的回调和异步编程。寻找这些术语:“高阶函数”、“承诺”、“延续”。这应该让你开始。
-
刚刚编辑并添加了我的整个 javascript 文件。也许这有点用处。我会得到一些关于异步函数和回调的信息,谢谢!
标签: javascript html function settimeout