我从w3s https://www.w3schools.com/howto/tryit.asp?filename=tryhow_js_typewriter得到了这个代码,我无法弄清楚如何在完成打字后退格。我试图减少我,但这也没有用。另外,如何添加延迟以使退格效果不会立即开始?
var i = 0;
var txt = 'Lorem ipsum dummy text blabla.';
var speed = 50;
function typeWriter() {
if (i < txt.length) {
document.getElementById("demo").innerHTML += txt.charAt(i);
i++;
setTimeout(typeWriter, speed);
}
if(i >= txt.length){
document.getElementById("demo").innerHTML -= txt.charAt(i);
i--;
setTimeout(typeWriter, speed);
}
}
<!DOCTYPE html>
<html>
<body>
<h1>Typewriter</h1>
<button onclick="typeWriter()">Click me</button>
<p id="demo"></p>
</body>
</html>
您可以使用boolean
值(true或false)来跟踪是否退格。如果你不是,你想增加i
,如果你退缩,那么你想减少i
。在这里,我使用.substr
从索引0到给定索引获取字符串的一部分。
见下面的例子:
var i = 0;
var txt = 'Lorem ipsum dummy text blabla.';
var speed = 50;
var backspace = false;
function typeWriter() {
document.getElementById("demo").innerHTML = txt.substr(0, i);
if (i > txt.length) backspace = true;
if (i == 0) backspace = false;
backspace ? i-- : i++;
setTimeout(typeWriter, speed);
}
<h1>Typewriter</h1>
<button onclick="typeWriter()">Click me</button>
<p id="demo"></p>
如果要完全停止循环(在退格之后),可以向setTimeout
函数调用添加条件。此外,你可以在打字和退格之间给出一个delay
:
var i = 0;
var txt = 'Lorem ipsum dummy text blabla.';
var speed = 50;
let delay = 25;
var backspace = false;
function typeWriter() {
document.getElementById("demo").innerHTML = txt.substr(0, i);
if (i > txt.length + delay) backspace = true;
if (i == -1) backspace = false;
backspace ? i-- : i++;
if(i != -1) setTimeout(typeWriter, speed);
}
<h1>Typewriter</h1>
<button onclick="typeWriter()">Click me</button>
<p id="demo"></p>