【问题标题】:rHow do I force a web page is immediately rendered during javascript execution?如何强制在 javascript 执行期间立即呈现网页?
【发布时间】:2020-12-13 19:30:46
【问题描述】:

如何强制解释器/编译器的不同行为

请注意,我是 Javascript 和 HTML 的初学者。我熟悉传统的编译语言,并接触过一些 MVC,因此可能基本缺乏对这种 WebAPI + Javascript 引擎模型如何结合在一起的理解。

我有一段 javascript 旨在慢慢增加显示在

中的文本

元素。我正在尝试以超慢的波特率模拟老式的哑终端。

我遇到的问题是,在脚本完成之前,浏览器中的页面似乎不会在视觉上更新。显然,“设计”。请参阅下面的代码,其中我尝试对

的文本字符串进行简单操作

元素。

webAPI 如何通过解释器命令执行内容背后肯定有一些科学依据。我需要做的是能够覆盖解释器的行为,以强制它在每次调用后渲染页面以将一些文本添加到

元素。或者,找到不同的方法来做到这一点?我不确定那会是什么?可能是 GIF 或 webAPI 中的一些动画功能。我能找到的最近的是这里->。 https://www.w3docs.com/snippets/css/how-to-have-the-marquee-effect-without-using-the-marquee-tag-with-css-javascript-and-jquery.html 但这似乎需要数学学位,而我只是想管理一些简单的文本字符串

我的代码旨在简单地操作

的文本内容

元素,但是......很遗憾,它不起作用,因为在 HTML 调用的排序被一次性呈现之前,首先完成了按字符添加文本字符的循环。

<html>
  <head>
    <link rel="stylesheet" href="stylesheet.css" />
  </head>

  <body>
    <p id="textParagraph"></p>
  </body>

  <script src="script.js"></script>
</html>

Javascript

'use strict';

document.getElementById('textParagraph').textContent = '  ';

let txt = 'some text';
let newStr = '';
let x = 0;
let y = 0;

/*
I am calling a function that recurses because I thought the FOR loop may affect the behavior of how javascript was executing the rendering?!  I was wrong!  it appears 
*/

recurse();

function recurse() {
  console.log(x);
  newStr = txt.substr(0, x);
  console.log(newStr);

  addCharToString();

  for (y = 0; y <= 100000000; y++) {
    let j = (y * y) / 2;
  } //I added some delay here in the hope that it may trigger the browser to quickly render the screen ;o)
  x++;

  if (x <= txt.length) recurse();
}

function addCharToString() {
  document.getElementById('textParagraph').textContent = newStr;
  console.log(x + ' whilst in addchartostring');
}

alert('mid script');

y = 0; //

secondRecurseTest();

console.log('about to start the next loop...');

for (y = 0; y <= 900000000; y++) {
  let j = (y * y) / 2;
}

function secondRecurseTest() {
  console.log('inside secondrecurse test');

  setTimeout(function () {
    console.log('inside delayed functioncall');
  }, 1000);

  y++;

  if (y <= 10) secondRecurseTest();
}

alert('end of script');

【问题讨论】:

  • 什么是预期行为...慢打字效果?
  • 嘿 Charlietfl,是的.. 就像一台旧的电传机或低波特率的哑终端(绿屏)
  • 不应该是硬网络搜索来找到这样的解决方案
  • @charlietfl,嗯,这很难,因为我找不到答案,所以在这里问这个问题。

标签: javascript html dom rendering


【解决方案1】:

我可能大错特错,但是将脚本粘贴到您的身体中再试一次

 <html>
  <head>
    <link rel="stylesheet" href="stylesheet.css" />
  </head>

  <body>
    <p id="textParagraph"></p>

  <script src="script.js"></script>
  </body>


</html> 

也试试这个:

<html>   
  <head>     
    <link rel="stylesheet" href="stylesheet.css" /> 
  </head> 

  <body>     
    <p id="textParagraph"></p>
    <script src="script.js" defer></script>    
  </body>     
</html>

【讨论】:

  • 好地方 Gismo。我没有注意到,甚至没有想过脚本的位置。我移动了它,但这似乎根本没有任何区别。
  • 另外,我注意到在脚本开头所做的其他页面更改,实际上是在重置

    文本的 HTML 中,也没有应用!我假设 WebAPI/浏览器(无论在做什么解释)正在决定智能地排序渲染?或者我错过了一些关键!

  • @Brianos 将window.addEventListener("load", _youfunction_ ); 添加到您的代码中。 load events 允许在 100% 网站加载后加载 JS。
  • 谢谢 Gismo,是的,我试过了。我也试过 Document.addEventListener("DOMContentLoaded",.....
  • soooooo..... 我猜还有另一种方法可以迫使解释器表现得不同。显然,......这太过分了,只是为了将一些字符一个接一个地放到一个文本字段上!!必须有其他方法来解决它....但是,我一直在研究这个,因为它确实提出了一个基本问题,即 JS 解释器如何工作以及如何与 webapi 集成?
猜你喜欢
  • 2013-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多