前端分段式渲染较长文章

news2024/9/20 17:38:26

实现思路:

1. 后端返回整篇文章

2. JavaScript 分段处理:将文章按一定的字符或段落长度分割,然后逐步将这些段落追加到页面上。

3. 定时器或递归调用:使用 setInterval 或 setTimeout 来控制段落的逐步渲染。

代码实现示例

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>流体文章渲染 - 狂人日记</title>
  <style>
    * {
      box-sizing: border-box;
    }
    body {
      font-family: "Microsoft YaHei", Arial, sans-serif;
      padding: 20px;
      background-color: #f4f4f4;
    }
    .article-container {
      width: 100%;
      max-width: 600px;
      margin: 0 auto;
      background-color: white;
      padding: 20px;
      border-radius: 8px;
      box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.1);
    }
    .loading {
      font-style: italic;
      color: gray;
    }
    /* 防止自动换行,保证连续渲染的文字不强制换行 */
    .no-break {
      white-space: pre-wrap; /* 保留文本中的换行和空格 */
      word-wrap: break-word; /* 超出宽度时自动换行 */
    }
  </style>
</head>
<body>

<div class="article-container" id="articleContainer">
  <div id="content" class="no-break"></div>
  <div id="loadingIndicator" class="loading">正在加载更多内容...</div>
</div>

<script>
  // 鲁迅《狂人日记》较长片段
  const longArticle = `
    《狂人日记》
    鲁迅

    今天晚上,很好的月光。我不见他已经有三十多年;我知道我本来是病了。
    今天看见他的眼睛,又让我害怕起来。我知道,他在害我。
    他的眼睛……今天真不对,和平时不一样。
    我想,他一定是早已预备下手,今天晚上便要动手的了。我的心跳得很厉害;不过我早已知道他会这样预备。
    他们都是这样,想法,害我。

    今天晚上,我忽然想起二十多年前,他对我说的一句话:“吃人。”
    吃人!这真叫我吓了一跳。我没有想到。他说得这么直截了当,这么认真。

    以前,我看见书上说“吃人”,总以为是瞎说。今天晚上,我才知道,书上说的竟是真的。

    我躺在床上,睁着眼睛,仔细想了想,越想越觉得害怕;因为我忽然想到,他们害人,还不只是今天,从古以来,他们就是这样。吃人!
    
    我想了半夜,差不多明白了:我自己也有过吃人的念头,我也有过要吃人的时候。这种想法,是从古代传下来的,如今我才懂得。 
    
    过去的历史,处处是吃人的记载。至于他们怎么吃,我全都知道了…… 

    但是,我绝对不愿再去吃人了!
    
    我想着,想着,忽然感到无比的悲哀,因为,我觉得自己完全陷在了这个吃人的大陷阱里,摆脱不开。我真想大叫几声:“不要吃人!不要再吃人!”可是喊不出来。我心里越发沉重,好像被无数的锁链绑住一般。
    
    昨天晚上,我又梦见他们了,他们全都聚在一起,脸上带着一种恶毒的笑容,像狼群一样盯着我。
    
    今天我终于明白了,他们早已准备好了,等着我入圈套呢。
    
    他们不是要吃我的肉,而是要夺走我的灵魂。
    
    我的心里越来越沉重,几乎要崩溃了……
    
    天哪,我究竟该怎么办?
  `;

  const contentElement = document.getElementById('content');
  const loadingIndicator = document.getElementById('loadingIndicator');

  let currentIndex = 0;
  const CHUNK_SIZE = 150; // 每次渲染的字符数调整为150,显示更多内容

  // 分段渲染文章内容
  function renderNextChunk() {
    if (currentIndex < longArticle.length) {
      const nextChunk = longArticle.slice(currentIndex, currentIndex + CHUNK_SIZE);
      contentElement.textContent += nextChunk; // 追加文本,不创建新段落

      currentIndex += CHUNK_SIZE;

      // 如果文章未加载完,继续调用下一个 chunk
      setTimeout(renderNextChunk, 1000); // 每1秒渲染下一段
    } else {
      loadingIndicator.style.display = 'none'; // 隐藏加载提示
    }
  }

  // 启动渲染
  renderNextChunk();
</script>

</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2144729.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2024年企业必备10款源代码加密软件!保护公司源代码 !

随着科技的发展&#xff0c;企业的数据安全性变得愈发重要&#xff0c;特别是源代码——企业的核心资产之一。源代码一旦泄露&#xff0c;可能带来不可估量的损失&#xff0c;导致竞争优势丧失、知识产权泄露&#xff0c;甚至对企业的未来生存造成威胁。因此&#xff0c;确保源…

Centos中关闭swap分区,关闭内存交换

概述&#xff1a; Swap 分区是 Linux 系统中扩展物理内存的一种机制。Swap的主要功能是当全部的RAM被占用并需要更多内存时&#xff0c;用磁盘空间代理RAM内存。Swap对虚拟化技术资源损耗非常大&#xff0c;一般虚拟化是不允许开启交换空间的&#xff0c;如果不关闭Swap&…

城市脉络下的空间句法:整合度与选择度的深度解析

上回写过一篇&#xff0c;基于空间句法的路网整合度、选择度分析&#xff0c;当时碍于篇幅和侧重点&#xff0c;主要讲了如何安装sDNA这个插件来实现路网的整合度、选择度分析&#xff0c;并且分析部分也只是画了几条简单的线段&#xff0c;这次我们深化一下原理和指标的解析&a…

手势识别-Yolov5模型-自制数据集训练

1、源码下载&#xff1a; 大家可以直接在浏览器搜索yolov5即可找到官方链接&#xff0c;跳转进github进行下载&#xff1a; 这里对yolov5模型补充说明一下&#xff0c;它是存在较多版本的&#xff0c;具体信息可在master->tags中查看&#xff0c;大家根据需要下载。这些不同…

2024.9.18 作业

将配置桥接网络的过程整理成文档&#xff0c;发csdn 放资源里了 思维导图&#xff1a;

0基础带你入门Linux之简介

1.Linux和Windows对比 Window很明显的特征就是有C盘、D盘登各种磁盘 我们通过点击不同的盘符&#xff0c;点击里面存储的文件进行查阅的操作 而Linux则很简单&#xff0c;只有一个根目录&#xff0c;也可以说只有一个盘&#xff0c;整个系统所有的东西都是在根目录下的 我们可…

C/C++中哪些数据存放于栈区、堆区、静态区、常量区的详细说明

文章目录 1. 栈区&#xff08;Stack&#xff09;2. 堆区&#xff08;Heap&#xff09;3. 静态区&#xff08;Static&#xff09;4. 常量区&#xff08;Read-Only or Constant Section&#xff09;总结&#xff1a;栈&#xff08;Stack&#xff09;的生长&#xff1a;堆&#xf…

js中apply,call,bind的区别与用法

在JavaScript中&#xff0c;所有的函数再被调用的时候都会默认传入两个参数&#xff0c;一个是this&#xff0c;还有一个是arguments。在默认情况下this都是指当前的调用函数的对象。但是有时候我们需要改变this的指向&#xff0c;也就是说使函数可以被其他对象来调用&#xff…

【数据可视化】Arcgis api 4.x 专题图制作之分级色彩,采用自然间断法(使用simple-statistics JS数学统计库生成自然间断点)

1.效果 2.实现 2.1 分级色彩 分级色彩是在GIS制图中&#xff0c;通过不同颜色等级来表示数据量级差异的符号化方法&#xff0c;帮助用户直观识别和比较数据的大小。 2.2 分级方法 在GIS中进行分级色彩制图时&#xff0c;可以选择不同的分级方法来表示数据的分布和变化&#xf…

好用又便宜的电商分账系统

多部门联合治税的背景下&#xff0c;合规运营是企业的首要任务。确保税务合规不仅能避免法律风险&#xff0c;还能提升企业的信誉和运营效率&#xff0c;电商分账系统是电商行业必备的合规工具。今天&#xff0c;商淘云为您分享选择性价比高的电商分账系统的三大规则&#xff0…

鸿蒙Harmony应用开发,数据驾驶舱登录页面的实现

鸿蒙Harmony应用开发&#xff0c;数据驾驶舱登录页面的实现 ​ 首先我们有个Splash 过渡页面来判断当前是用户是否登录&#xff0c;我们先从preferences中获取token是否存在。如果不存在直接跳转登录即可&#xff0c;如果存在的情况我们再去获取下用户的信息看看token是否过期…

探索音乐的新边界——AI写歌的奇妙呈现

在音乐的世界里&#xff0c; 创新总是令人充满期待。 对于没有创作灵感、毫无创作水平的小孩&#xff0c;走进一个充满惊喜的音乐平台 —— &#xff08;Suno&#xff09; 看看AI 写歌的神奇魅力。S为我们提供了一个丰富多彩的音乐世界&#xff0c; 从新歌推荐到各种风格的音…

Vmware虚拟机无法打开内核设备“\\.\Global\vmx86“的解决方法

我的问题是在一次系统更新后&#xff0c;导致虚拟机无法使用的。我的虚拟机只有方法三解决了问题。 一、方法一 以管理员身份打开cmd&#xff0c;依次执行以下命令&#xff1a; net start vmci net start vmx86 net start VMnetuserif二、方法二 按 WinR 键&#xff0c;运行…

用好这几个AI抠图工具,既省心又省力!

在设计、摄影和数字创作的世界里&#xff0c;抠图虽然常见&#xff0c;却往往让人感到繁琐。不过&#xff0c;随着人工智能的飞速发展&#xff0c;许多可爱的AI抠图工具应运而生&#xff0c;轻松高效地解决了这一难题&#xff01;下面就来看看几款超级实用的AI抠图工具&#xf…

Python “字符串操作” ——Python面试100道实战题目练习,巩固知识、检查技术、成功就业

本文主要是作为Python中列表的一些题目&#xff0c;方便学习完Python的元组之后进行一些知识检验&#xff0c;感兴趣的小伙伴可以试一试&#xff0c;含选择题、判断题、实战题、填空题&#xff0c;答案在第五章。 在做题之前可以先学习或者温习一下Python的列表&#xff0c;推荐…

Qt 学习第九天:标准对话框 页面布局

系统标准对话框 错误对话框 //错误对话框connect(createPro, &QAction::triggered, this, []{//参数1 父亲 参数2 标题 参数3 对话框内显示文本内容 。。。QMessageBox::critical(this, "报错!", "没加头文件!");}); 【运行结果】 信息对话框 co…

使用arduino玩基于esp8266的nodemcu开发板

一、简介 中秋节到图书馆看书&#xff0c;看到了arduino方面的书籍&#xff0c;里面有提到ESP8266模块。让我想起我抽屉里吃灰很久了的基于esp8266的nodemcu开发板。于是把书借回家研究了一下。这里做个记录。 二、我目前在使用的云服务器推荐 学Linux不搞个云服务器始终感觉…

【笔记】进制转换

文章目录 一、任意进制转十进制1、整数转化成十进制&#xff08;1&#xff09;二进制转十进制&#xff08;2&#xff09;八进制转十进制 2、小数转化成十进制&#xff08;1&#xff09;二进制转十进制&#xff08;2&#xff09;八进制转十进制 3、代码1、整数转化成十进制2、小…

使用 Vue 3 和 TypeScript 实现带打字效果的仿 AI 分析展示组件

在这篇博客中&#xff0c;我将分享如何用 Vue 3 和 TypeScript 实现一个带打字效果的 AI 分析展示组件。该组件具有如下功能&#xff1a; 动态打字效果&#xff1a;模拟打字机逐步显示内容。自动滚动&#xff1a;内容超出容器高度时自动滚动到最新位置。 1. 组件实现需求 我…

【读点论文】Text Recognition in the Wild: A Survey 非常纯粹的OCR研究,专业细致,脉络清晰

Text Recognition in the Wild: A Survey 文本的历史可以追溯到几千年前。文本所携带的丰富而精确的语义信息在广泛的基于视觉的应用场景中非常重要。因此&#xff0c;自然场景中的文本识别一直是计算机视觉和模式识别中一个活跃的研究领域。近年来&#xff0c;随着深度学习的…