javascript - 当遇到句点或逗号时,如何减慢从数组中输入随机字符串的函数?

标签 javascript settimeout

我有一个打字机功能:

var myArray = [
  'sentence. another sentence.', 
  'this sentence. yet another sentence.', 
];
var rand = myArray[Math.floor(Math.random() * myArray.length)];
var i = 0;
var speed = 55;

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

typeWriter();
<div id="question"></div>

如果当前正在输入的字符是句点或逗号,如何将打字机功能速度更改为 80 毫秒,然后在输入普通字母时返回到 55 毫秒?这将帮助我通过打字功能模仿语音节奏并提高可读性。感谢您的帮助。

最佳答案

只需将 speed 或第二个参数更改为 setTimeout

当您这样做时,您也可以通过以下方式使代码更清晰:

1) 使用await而不是setTimeout

2) 为延迟命名(例如 DELAYS),而不是一堆内联常量

3) 使用适当的 for 循环,而不是使用 if 语句重新发明 for 循环

4)使用适当的局部变量和函数参数而不是全局变量。

5) 使用 Element.textContent 而不是 innerHTML

6) 除非必要,否则请在 JS 中使用单引号。

let el = document.querySelector('div');

let wait = delay => new Promise(r => setTimeout(r, delay));

let typeWriter = async sentence => {
  const DELAYS = {'.': 500, ',': 200, default: 55};

  for (let c of sentence) {
    el.textContent += c;
    await wait(DELAYS[c] || DELAYS.default);
  }
};

typeWriter('sentence. a comma, another sentence. this sentence. yet another sentence.');
<div></div>

关于javascript - 当遇到句点或逗号时,如何减慢从数组中输入随机字符串的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58511238/

相关文章:

javascript - 如何使用 Node.js 实现 youtube.search.list

javascript - ObjectToQuery 函数仅返回具有值的属性,但我想要所有属性

javascript - 为什么 css 转换在显示更改后不立即触发

javascript - 将超时添加到循环

javascript - 计时器如何在 Javascript 中工作?

JavaScript sleep 与 SetTimeout

typescript - 简单倒数计时器 typescript

javascript - 浏览器中的 "Open link in new tab"与 HTML 中的 "target=_blank"

javascript - setTimeout() 方法中的 clearTimeout() 在 JS 中不起作用

javascript - 这一行 webpack html loader 语法是什么意思?