1

好吧,基本上我尝试从头开始制作打字机脚本,用于我的小型终端网络应用程序迷 xD

好吧,我有这个 JavaScript 东西:

var str = "dude";
var num = 1000;
for (var i = 0, len = str.length; i < len; i++) {
var num = num + 100;
var dude = str[i];
setTimeout('document.getElementById("guide").innerHTML +=dude;', num);
}

div显然,它以 100 毫秒的间隔用ID guide, "d" "u" "d" "e"写入 a ,但你猜怎么着?

它不这样做!

现在它做了什么,它打印“e”的次数与字符串中的字符一样多,伙计!

:|

谢谢,

我可能超级傻

但我想要一个修复!

提前致谢!

4

2 回答 2

1

您可能想在 setTimeout 中调用一个函数,如下所示:

var str = "dude";
var num = 1000;
for (var i = 0, len = str.length; i < len; i++) {
  var num = num + 100;
  var dude = str[i];
  setTimeout(function() {
    document.getElementById("guide").innerHTML +=dude;
  }, num);
}

或者

var str = "dude";
var num = 1000;
for (var i = 0, len = str.length; i < len; i++) {
  var num = num + 100;
  var dude = str[i];
  setTimeout(changeHtml, num);
}

function changeHtml() {
  document.getElementById("guide").innerHTML +=dude;
}

如果您想要更精确的 100 毫秒间隔,您可能需要使用 setInterval

var myInterval = setInterval(changeHtml, 100);
var len = str.length;
var current = 0;

function changeHtml() {
  if(current < len) {
    document.getElementById("guide").innerHTML +=str[current];
  }
  else {
    clearInterval(myInterval);
  }
  current++;
}
于 2013-03-07T05:56:04.947 回答
1

我写了一个接受 2 个参数的小函数:文本和时间:

function defiredWriteText(text,time, index){
    if(index === null || index === undefined) {
        index=0;
    }
    setTimeout(function (){
        var dude = text[index];
        document.getElementById("guide").innerHTML += dude;
        if(index < text.length-1)
            defiredWriteText(text, time, ++index);
    }, time)
}

示例:http: //jsfiddle.net/3e3yx/

于 2013-03-07T06:08:34.453 回答