0

我正在尝试单独打印一个单词的每个字母。这个词是变量字符串。

我有以下代码:

function typewriter() {
    var el = document.getElementById("typewr");
    var string = "Hello";

    for(var i=0;i<string.length;i++) {
        setTimeout(function(){el.innerHTML =+ string.charAt(i);},1000);
        }
}

(代码中有一个<div id="typewr"></div>down<body>并由 解析<body onLoad="typewriter()">

但由于某种原因,它只是返回 0(1 秒后)

为什么这样做?我如何解决它?oO

4

2 回答 2

2

您需要一个闭包来保持 的值i,然后您需要增加每次迭代的超时时间,因为循环不会等待下一次超时等,否则它将无法工作,因为所有超时将同时执行,并且当它们这样做时i将是它设置为的最后一个值:

function typewriter() {
    var el = document.getElementById("typewr");
    var string = "Hello";

    for(var i=0;i<string.length;i++) {
        (function(k) {
            setTimeout(function(){
                el.innerHTML += string.charAt(k);
            },k*1000);
        })(i);
    }
}

小提琴

我没有更改它,因为它似乎正在工作,但作为一般规则,对于变量、使用或其他尚未定义的东西来说,这string是一个非常糟糕的名称。str

于 2013-07-20T21:08:05.517 回答
0

el.innerHTML =+ string.charAt(i)

不应该是 += 而不是 =+。

于 2013-07-20T21:05:00.177 回答