前端分段式渲染较长文章

实现思路:
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;// 如果文章未加载完,继续调用下一个 chunksetTimeout(renderNextChunk, 1000); // 每1秒渲染下一段} else {loadingIndicator.style.display = 'none'; // 隐藏加载提示}}// 启动渲染renderNextChunk();
</script></body>
</html>
相关文章:
前端分段式渲染较长文章
实现思路: 1. 后端返回整篇文章。 2. JavaScript 分段处理:将文章按一定的字符或段落长度分割,然后逐步将这些段落追加到页面上。 3. 定时器或递归调用:使用 setInterval 或 setTimeout 来控制段落的逐步渲染。 代码实现示例 …...
C#程序员的堕落从nuget开始:将自己的代码发布到nuget
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…...
【C/C++语言系列】malloc、calloc和realloc区别和用法
这三个函数都是在堆区分配内存的函数,头文件都是: #include<stdlib.h>下面分别介绍这三个函数: malloc: 函数原型: void *malloc(unsigned int num_bytes);功能:堆区开辟一段内存空间 num_nytes&…...
【Linux】POSIX信号量与、基于环形队列实现的生产者消费者模型
目录 一、POSIX信号量概述 信号量的基本概念 信号量在临界区的作用 与互斥锁的比较 信号量的原理 信号量的优势 二、信号量的操作 1、初始化信号量:sem_init 2、信号量申请(P操作):sem_wait 3、信号量的释放(…...
Spring Boot-消息队列相关问题
Spring Boot 消息队列相关问题及解决方案 消息队列(Message Queue, MQ)在分布式系统中的应用越来越广泛,尤其是在解耦系统、异步通信、负载均衡等场景中起到了至关重要的作用。消息队列为不同的服务提供了一种异步通信的机制,使得…...
[数据集][目标检测]岩石种类检测数据集VOC+YOLO格式4766张9类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):4766 标注数量(xml文件个数):4766 标注数量(txt文件个数):4766 标注…...
图像分割基本知识
计算机视觉和图像处理 Tensorflow入门深度神经网络图像分类目标检测图像分割 图像分割 一、目标分割1.1 图像分割的定义1.2 任务类型1.2.1 任务描述1.2.2 任务类型 二、语义分割2.1 FCN网络2.1.1网络结构 2.2 Unet网络 三、UNet案例3.1 数据集获取3.1.1 设置相关信息3.1.2 图像…...
LIN总线CAPL函数——干扰LIN帧响应段(linInvertRespBit )
🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】🍅 玩转CANoe&…...
【30天玩转python】网络编程基础
网络编程基础 网络编程是指编写能够在网络上进行通信的程序,通过网络进行数据的发送与接收。Python 提供了许多库和工具来进行网络编程,如 socket、urllib 和 requests。在这篇文章中,我们将介绍网络编程的基础知识,并演示如何使…...
【PCB工艺】如何实现PCB板层间的互连
系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 前言①、什么是通孔②、通孔是怎样产生的③、通孔种类④、盘中孔⑤、设计建议 前言 送给大学毕业后找不到奋斗方向的你…...
FastAPI--如何自定义Docs UI,包括多个APP、静态资源、元数据等
如何mount 一个FastAPI Application? “Mounting” means adding a completely “independent” application in a specific path, that then takes care of handling everything under that path, with the path operations declared in that sub-application. 示例代码 主…...
【FPGA XDMA AXI Bridge 模式】PCIe:BARs 和 AXI:BARs 含义解析
一. XDMA IP核两种模式 Xilinx的 DMA/Bridge Subsystem for PCI Express IP核中,支持普通的XDMA模式,但是这种模式只允许主机端发起PCIe 读写请求,FPGA内部无法主动发起读写请求,也即FPGA无法主动读写HOST的内存。 而该IP核的另…...
嵌入式-QT学习-小练习
1. 实现多窗口 2. 给按键增加图标 3. 动图展示 结果演示: Mul_Con main.cpp #include "widget.h"#include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();return a.exec(); }一、第一个窗口展示 …...
使用 Flask-Limiter 和 Nginx 实现接口访问次数限制
在现代 Web 应用中,针对敏感接口(如短信验证码、登录接口等)的访问次数限制至关重要。通过设置合理的限流策略,可以有效防止接口滥用,避免过多的资源消耗,并提升安全性。本文将通过 Nginx 和 Flask-Limiter…...
【数据结构】排序算法---冒泡排序
文章目录 1. 定义2. 算法步骤3. 动图演示4. 性质5. 算法分析6. 代码实现C语言PythonJavaCGo 结语 1. 定义 冒泡排序(英语:Bubble sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的…...
mysql数据库中事务锁的机制
读锁又称为共享锁,简称S锁,共享锁就是多个事务对于同一数据可以共享一把锁,都能访问到数据,但是只能读不能修改。 写锁又称为排他锁,简称X锁,排他锁就是不能与其他所并存,如一个事务获取了一个…...
并发工具类-CountDownLatch
CountDownLatch 是 Java 中提供的一种非常有用的并发工具类,位于 java.util.concurrent 包中。它可以使一个或多个线程等待其他线程完成一组特定的操作后再继续执行。CountDownLatch 通过维护一个计数器来实现这一点,计数器的初始值由构造函数设定。每当…...
进程的重要函数
进程的重要函数: fork函数 了解fork函数 通过调用fork()函数,则会产生一个新的进程。调用fork()函数的进程叫做 父进程,产生的新进程则为子进程。 其编码过程: 1.函数功能: 函数头文件 #include <sys/types.h> #include <unistd.h> 函数…...
python 实现average median平均中位数算法
average median平均中位数算法介绍 平均(Mean)和中位数(Median)是统计学中常用的两个概念,用于描述一组数据的中心趋势,但它们并不是算法,而是数据处理的结果。不过,我可以解释如何…...
HTML概述
1. HTML概述 1.1 HTML定义 HTML超文本标记语言,其中超文本是链接,标记也叫标签(即带尖括号的文本)。 1.2 HTML基本骨架 HTML基本骨架是网页模板。 <html><head><title>网页的标题</title></head&…...
Unity-MCP协议:可嵌入、可协商的AI上下文通信标准
1. 这不是又一个“AI插件”,而是Unity开发工作流的底层重定义你有没有过这样的时刻:在Unity里反复调整Animator Controller的过渡条件,只为让角色转身动画不穿模;写完一段NavMesh寻路逻辑,却要花两小时调试Agent卡在斜…...
ThinkPad开机嘀嘀响或报2100/2110错误?可能是硬盘松了!自己动手检测与修复指南
ThinkPad开机嘀嘀响或报2100/2110错误?三步排查硬盘接触不良问题ThinkPad用户对那个标志性的开机"嘀嘀"声再熟悉不过——正常情况下它意味着系统自检通过。但当这个声音变成急促的报警音,伴随屏幕上出现"2100 Detection error"或&qu…...
Lampiao 靶场
Lampiao 靶场完整渗透解析一、靶场环境信息攻击机(Kali)IP:192.168.146.128靶机 IP:192.168.146.129目标:获取靶机 root 权限与 flag二、步骤 1:信息收集(端口与服务扫描)nmap -p- -…...
串口通信粘包问题:成因深度解析与项目实战解决方案
在嵌入式开发、工业工控、上位机下位机交互项目中,串口(RS232/RS485)是最基础、最常用的通信方式。绝大多数开发者都遇到过这样的问题:串口接收的数据偶尔错乱、解析报错、数据拼接异常,单次接收的数据时而半包、时而多…...
量子软件测试的挑战与优化策略
1. 量子软件测试的挑战与机遇量子计算正在从实验室走向实际应用,随之而来的是对可靠量子软件的需求激增。与传统软件不同,量子程序面临三大独特挑战:首先,量子态的叠加性和纠缠性使得测试变得异常复杂。一个n量子比特系统可以同时…...
钱钟书《围城》第1-5章阅读笔记:一场关于人生困境的提前预演
前言 钱钟书先生的《围城》被誉为"新儒林外史",是中国现代文学史上风格独特的讽刺经典。这部创作于20世纪40年代的长篇小说,以抗战初期为背景,通过主人公方鸿渐的人生轨迹,深刻揭示了知识分子群体的精神困境与人性弱点。…...
基于Cynthion逆向USB协议,为DP100电源开发Linux控制软件
1. 项目概述:用Cynthion嗅探USB,为DP100电源打造Linux软件作为一名长期在Linux环境下折腾硬件和嵌入式开发的爱好者,我经常遇到一个头疼的问题:很多不错的桌面小设备,比如电源、示波器、逻辑分析仪,它们的官…...
基于KS距离度量交通流分布偏移:提升DRL交通信号控制鲁棒性的工程实践
1. 项目概述与核心挑战在智能交通系统(ITS)领域,基于深度强化学习(DRL)的交通信号控制(Traffic Signal Control)正从研究走向实际部署。作为一名长期关注AI落地应用的从业者,我见过太…...
从XAI到HXAI:构建以人为中心的可解释AI框架与实践
1. 项目概述:从“黑箱”到“白盒”,构建可信AI的演进之路在机器学习项目里摸爬滚打了十几年,我见过太多因为模型“说不清道不明”而引发的信任危机。一个在测试集上表现完美的信用评分模型,可能因为无法向风控专家解释“为什么拒绝…...
Actor Framework里的“多米诺骨牌”:一个错误如何让整个嵌套操作者链崩溃?
Actor Framework中的“多米诺效应”:如何避免嵌套操作者链的崩溃 在分布式系统设计中,Actor模型因其天然的并发处理能力而备受青睐。LabVIEW的Actor Framework(AF)通过操作者(actor)的嵌套结构,为复杂系统提供了模块化解决方案。然而&#x…...
