JavaScript:不断改变字符

acg*_*cgf 5 javascript recursion

我有一个<p>标签

<p id="rev">|</p>
Run Code Online (Sandbox Code Playgroud)

我想通过 Javascript 不断更改以创建一个老式的加载动画,该动画将重复遵循此模式:

| / - \
Run Code Online (Sandbox Code Playgroud)

我不熟悉 Javascript 如何处理递归,但以下代码块只是创建了一个很长的加载周期并且无法按预期运行:

function runRev() {
    document.getElementById('rev').innerHTML = "/";
    setTimeout(function(){}, 2000);
    document.getElementById('rev').innerHTML = "-";
    setTimeout(function(){}, 2000);
    document.getElementById('rev').innerHTML = "\\";
    setTimeout(function(){}, 2000);
    document.getElementById('rev').innerHTML = "|";
    setTimeout(function(){}, 2000);
    runRev();
}
runRev();
Run Code Online (Sandbox Code Playgroud)

我想有更好的方法来实现这一点。如何创建一个持续运行以更改单个字符的 Javascript 函数?

Rob*_*sen 6

这真的不需要递归。只需使用setInterval()while 循环字符数组即可:

const chars = ['|', '/', '-', '\\'];
const el = document.getElementById('loading');
let i = 0;

setInterval(() => {
  el.innerHTML = chars[i];
  i = (i + 1) % chars.length;
}, 100);
Run Code Online (Sandbox Code Playgroud)
<span id="loading"></span>
Run Code Online (Sandbox Code Playgroud)