开发者问题收集

从数组生成随机字符串时的 JavaScript 打字机动画;

2017-12-22
405

我有一个随机引号生成器。我想让用户单击生成按钮时出现打字机效果。我尝试了之前代码中的一个函数

//var txt = 'I don't want to make the static';
//                  var speed = 70;
var i = 0;

function typeWriter(txt, speed) {
    if (i < txt.length) {
        document.getElementById("display").innerHTML += txt.charAt(i);
        i++;
        setTimeout(typeWriter, speed);
    }
}

function generateQuote() {
    document.getElementById("display").style.fontStyle = "normal";
    var random = Math.floor(Math.random() * (quotes.length));


    typeWriter(quotes[random], 70);

    //  document.getElementById("display").innerHTML='<i>'+quotes[random]+'</i>';

}

代码出错:

Uncaught TypeError: Cannot read property 'length' of undefined at typeWriter

我应该怎么做才能让代码正常工作?还有其他替代方案吗?

2个回答

问题是 typeWriter 调用延迟了 setTimeout ,不会传递任何参数 - 因此 txt 值将为 undefined 。解决此问题的一种方法是在 typeWriter 内创建内部函数,然后在 setTimeout 中使用它:

function typeWriter(txt, speed) {
    var i = 0;
    (function addLetter() {
       document.getElementById("display").innerHTML += txt.charAt(i);
       i++;
       if (i < txt.length) {
         setTimeout(addLetter, speed);
       }
    })();
}

此处 addLetter 的范围中同时包含 txtspeedi

raina77ow
2017-12-22

由于错误是在 typeWriter 中引发的,请检查 txt 是否已被声明分配了值,否则调用 .length 将导致此错误。

Frank Odoom
2017-12-22