javascript - 虽然 True 循环会阻止页面加载

标签 javascript html

如果我的问题看起来很简单,我深表歉意,我仍在尝试弄清楚 JavaScript。我正在建立一个网站,我想要 <p> 的内容不断改变。我希望它循环遍历我的 javascript 代码中定义的数组的内容。然而,当我把所有东西都放在 while (true) 中时(因为我希望它不断发生),<p>内容永远不会改变,页面卡在加载上。

这是我到目前为止的代码:

<!DOCTYPE html>
<html lang="en">

<head>
  <link rel="stylesheet" href="style.css">
  <link rel="stylesheet" href="about.css">
  <meta charset="UTF-8">
  <title>My Site</title>
</head>

<script>
  function changeDynamicText() {
    var descriptions = ['list', 'of', 'strings', 'to', 'loop', 'over'];
    let i = 0;
    while (true) {
      window.setTimeout(function() {
        document.getElementById("dynamicline").innerHTML = descriptions[i];
      }, 600);
      i = i + 1;
      if (i >= descriptions.length) i = 0;
    }
  }
</script>

<body onload="changeDynamicText()">

  <p id="dynamicline">Starting Text</p>

</body>

</html>

非常感谢任何形式的帮助。

最佳答案

当你使用while(true)时,它会阻止 JavaScript event loop因此不再渲染 body 的其余部分。

您可以通过异步工作来实现您想要做的事情。您已经在其中使用了 setTimeout,但您也可以使用 setInterval 定期触发该方法。

function changeDynamicText() {
    var descriptions = ['list','of','strings','to','loop','over'];
    let i = 0;

    setInterval(function () {
        document.getElementById("dynamicline").innerHTML = descriptions[i];
        i = i + 1;
        if (i >= descriptions.length) i = 0;
    }, 600);
}

关于javascript - 虽然 True 循环会阻止页面加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56419832/

相关文章:

javascript - 如何在 Angular 8 中动态更改下拉值?

javascript - 最新的 Google Analytics API 引用?

javascript - 如何使 if 语句中的 "document.write"在同一 html 页面而不是新的空白页面上工作?

javascript - 如果 .like count div 为空,则无法增加计数

jquery - Bootstrap 输入不再四舍五入

javascript - 如何将按钮更改为可点击的图像

javascript - 极其简单的HTML js代码,但是为什么不行呢?

javascript - Angular 路由通配符可能/解决方法?

html - 正确对齐 html div 和 css

javascript - 使用下拉框和文本框进行计算