[英]Add delay on each loop iteration
总体目标是为某些文本实现类似打字的动画。 我正在遍历字符串的每个字母,并使用FOR循环中的setTimeout
每个字母之间的延迟添加到DOM中。
我的HTML--
<h1 id="name">Hello World!</h1>
我的JavaScript--
$(document).ready(function(){
var typeText = $("#name").html();
var textLength = typeText.length;
$("#name").empty();
for(i=0;i<textLength;i++) {
(function(i){
console.log("first function being fired!");
setTimeout(function(i){
console.log("setTimeout function being fired!");
console.log(i);
var letter = typeText.substring(i,i+1);
console.log(letter);
$("#name").append(letter);
},5000);
})();
}
});
我没有收到任何错误,但是我首先使用12个帐户触发了“第一个功能被解雇!”,延迟了5秒,然后使用了12个帐户登录:
setTimeout function being fired<br />
undefined<br />
[line-break]
我认为我缺少FOR循环的基本部分,或者不完全了解如何在其中处理函数。
你不是一个值传递到你内心的i
秒。
$(document).ready(function(){
var typeText = $("#name").html();
var textLength = typeText.length;
$("#name").empty();
for(i=0;i<textLength;i++) {
(function(i){
console.log("first function being fired!");
setTimeout(function(){ // not necessary here
console.log("setTimeout function being fired!");
console.log(i);
var letter = typeText.substring(i,i+1);
console.log(letter);
$("#name").append(letter);
},5000);
})(i); // pass here
}
});
而且,如果您希望每个按钮在前一个命令之后5秒钟触发,而不仅仅是等待5秒钟并执行所有操作,则可以这样设置超时时间:
setTimeout(function(){
// ...
}, 5000 * i);
我相信您正在寻找这样的行为:
function doLetter(totaltext, i) { console.log("function being fired on text",totaltext,"at position",i); var letter = totaltext.substring(i, i + 1); console.log(letter); $("#name").append(letter); if(i<totaltext.length-1){ setTimeout(doLetter.bind(null,totaltext,i+1), 500); } } $(document).ready(function() { var typeText = $("#name").html(); $("#name").empty(); doLetter(typeText,0); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.0/jquery.min.js"></script> <body> <p id="name">Hello World!</p> </body>
整个过程不是立即运行所有字母处理程序。 运行一个,让它知道正在处理的原始文本。 完成字母处理后,它将为下一个字母设置超时。 注意“绑定” :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.