javascript - 如何在 JavaScript 中实现暂停和删除打字机效果?
问题描述
在这里是 JS 的新手,想知道是否有人可以指导我在 JavaScript 中实现打字机效果时如何暂停和删除。我有一个函数可以成功地键入数组中的每个单词,但是我希望它在键入每个单词并退格后暂停,或者在键入下一个单词之前删除字母。
//counter
var i = 0;
var index = 0;
var texts = ['Salesforce Consultant', 'Developer', 'Writer'];
var speed = 110;
let letter = '';
let currentText = '';
let delay = 25;
function typeWriter() {
//If counter is less than the # of letters in txt, reset array of words
if (i === texts.length) {
i = 0;
}
//Use count to select text to display
currentText = texts[i];
letter = currentText.slice(0, ++index);
document.querySelector("#demo").textContent = letter;
//If letters displayed are the same number of letters in the current text
if (letter.length === currentText.length) {
//Pause before deleting
//Delete letters in word
//Word is done displaying, and reset letters on screen
i++;
index = 0;
}
setTimeout(typeWriter, speed);
}
typeWriter();
<div id="demo"></div>
HTML
<div class="centered">
<div class="intro">
<p>A  </p>
<p class ="typing" id="demo"></p>
</div>
</div>
解决方案
您可以通过引入一个变量来确定index
将如何变化(+1 或 -1)。不同的延迟只是setTimeout
.
我还建议将一些全局变量转换为函数参数:这样它们的范围会更好(更窄)。这些变量获得的更改可以通过您setTimeout
传递给下一次调用的内容来管理。
这是如何工作的:
const texts = ['Salesforce Consultant', 'Developer', 'Writer'];
const speed = 110;
const pause = 800; // <--- the longer delay between text direction changes
function typeWriter(i=0, index=1, direction=1) {
let displayed = texts[i].slice(0, index);
document.querySelector("#demo").textContent = displayed;
if (displayed.length >= texts[i].length) { // start removing after pause
setTimeout(() => typeWriter(i, index-1, -1), pause);
} else if (displayed.length === 0) { // go to next text after pause
setTimeout(() => typeWriter((i+1) % texts.length), pause);
} else { // continue in the current direction
setTimeout(() => typeWriter(i, index+direction, direction), speed);
}
}
typeWriter();
<div id="demo"></div>
推荐阅读
- python - 如何将 JSON 数据转换为 HTML 表格?
- asp.net - 实体框架类生成不起作用
- swift - 是否可以将 GeometryReader 的值传递给 @Observableobject
- c# - 我可以在不向客户端发送响应的情况下终止服务器上的 HTTP 事务吗?
- python - 尝试使用词袋概念生成特征列并合并到现有数据框
- python - 具有时间序列数据/行到列/重新组织数据到单行的数据透视表
- java - Spring webflux:在响应式请求处理的整个过程中保持 EntityManager 打开
- c# - 如何计算金额的间接费用
- javascript - 如何将事件从父级传递给子级以与功能组件做出反应?
- pouchdb - PouchDB 强制更新