简体   繁体   English

如何打造打字机效果?

[英]How to create typewriter effect?

I'm trying to create a typewriter function for a school project and i'm not sure why its not working我正在尝试为学校项目创建打字机 function,但我不确定它为什么不工作

HTML code: HTML 代码:

<h1 id="typewriter"></h1>

Javascript code: Javascript 代码:

typewriter();

function typewriter() {
    var textArray = text1.split("");
    for (var i = 0; i < textArray.length; i++) {
        document.getElementById('typewriter').innerHTML = textArray[i];
        setTimeout(typewriter, 80);
    }
}

Thanks in advance for the help!在此先感谢您的帮助!

I think you're looking for something like this:我想你正在寻找这样的东西:

You set a timeout for every char of the string, but give every timeout additional delay您为字符串的每个字符设置超时,但给每个超时额外的延迟

So the first char will be written after 0ms delay所以第一个字符将在 0ms 延迟后写入
The second after 100ms delay 100ms 延迟后的第二个
The third after 200ms delay 200ms延迟后的第三个
And so forth等等

Example:例子:

 function typewriter(element, text, delay = 100) { for (let i = 0; i < text.length; i++) { setTimeout(() => { element.innerHTML += text[i]; }, delay * i); } } const el = document.getElementById("typewriter"); typewriter(el, "Lorem ipsum dolor sit amet");
 <h1 id="typewriter"></h1>

Using modern async/await makes things like this nice and simple.使用现代的 async/await 使这样的事情变得简单而美好。

 const sleep = ms => new Promise(resolve => setTimeout(resolve, ms)); async function typewriter(element, text, delay = 100) { for (let i = 0; i < text.length; i++) { await sleep(delay); element.innerHTML += text[i]; } } const el = document.getElementById("typewriter"); typewriter(el, "Lorem ipsum dolor sit amet");
 <h1 id="typewriter"></h1>

You need to setInterval to trigger the function multiple times.您需要 setInterval 多次触发 function。 Set time out it fires just once when the time came设置超时它只在时间到来时触发一次

text = text.split("")

function typewriter() {
    document.getElementById('typewriter').innerHTML += text.shift();
}


setInterval(typewriter, 1000);

Use this way it will work.使用这种方式它会工作。

var i = 0;
var text = "Hello World!!";
typewriter();
function typewriter() {
    debugger;
    if (i < text.length) {
        document.getElementById('typewriter').innerHTML += text.charAt(i);
        i++;
        setTimeout(typewriter, 100);
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM