JavaScript打字机退格效应

问题描述 投票:0回答:1

我从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>
javascript
1个回答
1
投票

您可以使用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>
© www.soinside.com 2019 - 2024. All rights reserved.