GitHub 热门项目:借口

摘要

GitHub项目:pretext 仓库地址:https://github。

the layout pretext prepare text
2026-05-10 1 阅读 GitHub Trending
GitHub项目:借口 仓库地址:https://github.com/ Chenglou/pretext 星级:46535 | 作者:城楼 项目描述:快速、准确、全面的文本测量和排版 =================================================== 自述文件内容: # 借口 用于多行文本测量和布局的纯 JavaScript/TypeScript 库。快速、准确并支持所有您甚至不知道的语言。允许渲染到 DOM、Canvas、SVG 以及很快的服务器端。 Pretext 回避了 DOM 测量的需要(例如 `getBoundingClientRect`、`offsetHeight`),这会触发布局重排,这是浏览器中最昂贵的操作之一。它实现了自己的文本测量逻辑,使用浏览器自己的字体引擎作为基本事实(非常适合人工智能的迭代方法)。 ## 安装 ````嘘 npm install @henglou/pretext ```` ## 演示 克隆存储库,运行“bun install”,然后运行“bun start”,然后在浏览器中打开“/demos/index”。在 Windows 上,使用“bun run start:windows”。 或者,您也可以在 [henglou.me/pretext](https:// Chenglou.me/pretext/) 上观看他们的直播。更多内容请参见 [somnai-dreams.github.io/pretext-demos](https://somnai-dreams.github.io/pretext-demos/) ## API Pretext 有 2 个用例: ### 1. 测量段落的高度_无需接触 DOM_ ````ts 从 '@ Chenglou/pretext' 导入 { 准备,布局 } const prepared = 准备('AGI春天到了。 ?????? ?‎', '16px Inter') const { height, lineCount } = 布局(prepared, 320, 20) // 纯算术。没有 DOM 布局和回流! ```` `prepare()` 执行一次性工作:规范化空白、对文本进行分段、应用粘合规则、使用画布测量分段并返回不透明句柄。 `layout()` 是之后的廉价热路径:对缓存宽度的纯算术。不要为相同的文本和配置重新运行`prepare()`;这会破坏它的预计算。例如,在调整大小时,仅重新运行“layout()”。 如果您想要类似文本区域的文本,其中普通空格、“\t”制表符和“\n”硬分隔符保持可见,请将“{whiteSpace: 'pre-wrap'}”传递给“prepare()”: ````ts const准备=准备(textareaValue,'16px Inter',{whiteSpace:'预换行'}) const { height } = 布局(准备好,textareaWidth,20) ```` 其他 `prepare()` 选项包括 `{ wordBreak: 'keep-all' }` 用于类似 CSS 的 `word-break: keep-all`,以及 `{ letterSpacing: n }` 来匹配 CSS `letter-spacing`(`n` 被视为 px 值)。 返回的高度是解锁 Web UI 的最后一个关键部分: - 正确的虚拟化/遮挡,无需猜测和缓存 - 精美的用户区布局:砖石结构、JS 驱动的类似 Flexbox 的实现、无需 CSS hack 的情况下微调一些布局值(想象一下)等。 - _开发时间_验证(尤其是现在使用人工智能),例如标签按钮不会溢出到下一行,无需浏览器 - 当新文本加载并且您想重新定位滚动位置时防止布局发生变化 ### 2. 自己手动布置段落行 用“prepareWithSegments”切换“prepare”,然后: - `layoutWithLines()` 为您提供固定宽度的所有线条: ````ts 从“@henglou/pretext”导入{prepareWithSegments,layoutWithLines} const prepared =prepareWithSegments('AGI春天到了。 ?, '18px "Helvetica Neue"') const { 行 } =layoutWithLines(准备