为了能够在不完全加载的情况下浏览树文档(如 HTML),您必须做出一些假设——比如文档是实际的树。所以,不要费心检查关闭标签。无论如何,关闭标签是为人类消费而设计的,计算机也会很高兴<>
。
第一步是假设文档的第一部分由文档的第一部分表示。这听起来像是一个重言式,但对于“现代”HTML 和当然 JS,这在技术上不再正确。尽管如此,如果任何 HTML 行可以影响任何像素,您根本无法部分加载页面。
因此,如果 HTML 文件的位置和屏幕上的页面之间存在简单的关系,那么下一步就是在每个页面的末尾定义解析状态。然后这将包括单个文件偏移量,可能(但不一定)在段落的末尾。此状态的一部分还有一堆打开的标签。
为了使分页更容易,为您迄今为止遇到的每个页面保留这种“页面边界”状态是明智的。这使得回页变得容易。
现在,在渲染新页面时,之前的页面边界状态将为您提供初始渲染状态。您只需读取 HTML 并逐个元素地呈现它,直到溢出单个页面。然后您回溯一点并确定新的页面边界状态。
平滑滚动基本上是渲染两个相邻页面并显示第一个页面的 x% 和第二个页面的 100-x% 的问题。一旦你实现了这一点,在渲染每一页时完成一个段落可能会变得很聪明。这将使您的页面长度略有不同,但您不必处理损坏的段落,这反过来会使您的页面边界状态更小。