@sch39/canvas-text-paragraphs

中文文档
2.0.0发布于 2026/11/02MITTypeScriptESM + CJS零依赖

一个轻量级JavaScript库,旨在简化在画布环境中管理文本段落的过程。它提供了一套全面的工具来对齐、缩进和间隔文本段落,使开发人员能够创建可视化

中文使用文档
文档目录12 节
  1. 安装
  2. 使用
  3. 导入库
  4. 例子
  5. 打印稿
  6. 演示
  7. 函数参数
  8. 行为笔记
  9. 错误
  10. 开发
  11. 从1.x迁移
  12. 许可证

画布文本段落

Canvas Text paragraph是一个JavaScript库,旨在促进在HTML5画布元素上呈现格式化段落。它提供了在画布内管理文本对齐、缩进、行间距和垂直定位的功能。

安装

你可以通过npm安装Canvas Text段落:

npm install @sch39/canvas-text-paragraphs

或者来自unpkg

<script src="https://unpkg.com/@sch39/canvas-text-paragraphs@latest/dist/index.umd.js"></script>

该脚本公开了全局函数 canvasTextParagraphs.

使用

导入库

import canvasTextParagraphs from '@sch39/canvas-text-paragraphs'

例子

import canvasTextParagraphs from '@sch39/canvas-text-paragraphs';

const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d');

const text = `
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Nulla facilisi. Integer id elit varius, commodo tortor eget,
lacinia ligula. Ut interdum nisi non dui pretium faucibus.
`;

canvasTextParagraphs(text, ctx, {
  align: 'center',
  verticalAlign: 'middle',
  spaceBeforeParagraph: 20,
  spaceAfterParagraph: 20,
  indent: {
    type: 'firstLine',
    by: 40,
  },
});


打印稿

类型定义捆绑在一起(index.d.ts),没有 @types 包需要:

import canvasTextParagraphs from '@sch39/canvas-text-paragraphs'
import type { Options } from '@sch39/canvas-text-paragraphs'

const ctx = (document.getElementById('myCanvas') as HTMLCanvasElement).getContext('2d')!

const options: Options = {
  width: 400,
  align: 'justify',
  indent: { type: 'firstLine', by: 4 },
}

canvasTextParagraphs('Hello world', ctx, options)

演示

链接: 点击这里

现场演示: 点击这里

函数参数

  • 文本 (string):要呈现的文本内容。
  • ctx (CanvasRenderingContext2D):画布渲染上下文。
  • 选项 (object):可选配置对象,具有以下属性:
    • 宽度 (number或‘auto’,默认值:‘auto’):文本框的宽度。 'auto' =画布的其余部分 xStart.
    • 高度 (number或‘auto’,默认值:‘auto’):文本框的高度。 'auto' =画布的其余部分 yStart。下面的线条 yStart + height 没有画出来。
    • xStart (数字,默认值:0):文本框的左边缘。
    • yStart (数字,默认值:0):文本框的上边缘。
    • 对齐 (string, default: 'left‘):水平文本对齐(’left', 'center', 'right', 'justify')。
    • verticalAlign (string, default: 'top‘):垂直文本对齐(’top', 'middle', 'bottom')。
    • 基线 (string, default: 'top‘):文本基线对齐(’top', 'hanging', 'middle', 'alphabetic', 'ideographic', 'bottom')。
    • spaceBeforeParagraph (数字,默认值:0):每段前的空格。
    • spaceAfterParagraph (数字,默认值:0):每个段落后面的空格。
    • lineSpacing (number或‘auto’, default: 'auto'):行间距因子(乘以行高),或 'auto' 用于自动间隔。
    • 缩进 (object):与默认值合并,所以你可以只传递你需要的键(例如: { type: 'firstLine' } 使用 by: 0, { by: 4 } 使用 type: 'none')。
      • 类型 (string, default: 'none‘):缩进类型(’none', 'firstLine', 'hanging')。
      • 由 (number,默认值:0):缩进量,表示当前字体中的空格字符数。

文本框为 [xStart, xStart + width] x [yStart, yStart + height]。自动换行, align, indent 和 verticalAlign 都在这个方框内计算。

行为笔记

  • 段落之间用 \n。每一段都是逐字剪裁和包装的;一个比 width 不裂开,溢出盒子。
  • 段落的最后一行永远不会对齐(它是左对齐的)。
  • 画布状态是隔离的: textBaseline 和 textAlign 在绘制时设置并在之后恢复,因此您自己的值保持不变。集 ctx.font 和 ctx.fillStyle 之前调用。

错误

无效输入引发 Error 带着信息 Invalid <name>例如: Invalid text, Invalid ctx, Invalid Align, Invalid width 或者 Invalid indent.by. ctx 一定是。 CanvasRenderingContext2D.

开发

npm install
npm test        # vitest
npm run build   # dist/ (cjs, es, umd)
npm run dev     # vite dev server

从1.x迁移

在2.0.0, width 和 height 是 大小 文本框的。在1。X它们是绝对的右/底边缘(xStart + size)。

  • 如果 xStart 和 yStart 是 0 (或省略),什么都没有改变。
  • 如果你设置 xStart/yStart 一起 width/height,从旧值中减去起始值:
// 1.x: right edge at x = 300, bottom edge at y = 200
canvasTextParagraphs(text, ctx, { xStart: 50, yStart: 20, width: 300, height: 200 })

// 2.0.0: same box
canvasTextParagraphs(text, ctx, { xStart: 50, yStart: 20, width: 250, height: 180 })
  • 'auto' 仍然填满画布,现在从 xStart/yStart.
  • verticalAlign: 'middle' | 'bottom' 现在中心/底部在框内,而不是相对于画布原点。

1.1.0以来的其他行为变化:

  • 完全符合框宽的行不再提前换行(不再测量尾随空间),因此换行可能与1.x略有不同。
  • indent 与其默认值合并; { type: 'firstLine' } 没有 by 不再投掷。
  • textBaseline 和 textAlign 将在每次调用后恢复您的上下文。
  • UMD构建只公开全局 canvasTextParagraphs,现在可以在任何地方导入ES构建 self 未定义(节点,SSR)。

许可证

本项目使用麻省理工学院许可协议。看到 许可证 文件查看详细信息。

版本与发布记录

@sch39/canvas-text-paragraphs 共发布 5 个版本,首次发布于 2024/06/30;过去 12 个月发布了 1 个版本。

版本发布日期距今
2.0.0latest2026/11/021 天前
1.0.32024/07/012 年前
1.0.22024/06/302 年前
1.0.12024/06/302 年前
1.0.02024/06/302 年前

关于 @sch39/canvas-text-paragraphs 的常见问题

@sch39/canvas-text-paragraphs 是什么?

一个轻量级JavaScript库,旨在简化在画布环境中管理文本段落的过程。它提供了一套全面的工具来对齐、缩进和间隔文本段落,使开发人员能够创建可视化

如何安装 @sch39/canvas-text-paragraphs?

在项目目录运行 npm install @sch39/canvas-text-paragraphs,或使用 pnpm add / yarn add / bun add。

@sch39/canvas-text-paragraphs 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@sch39/canvas-text-paragraphs 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@sch39/canvas-text-paragraphs 可以商用吗?

@sch39/canvas-text-paragraphs 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@sch39/canvas-text-paragraphs 还在维护吗?

最新版本 2.0.0 发布于 2026/11/02(1 天前);至今共发布 5 个版本,其中过去 12 个月发布了 1 个;首次发布于 2024/06/30。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。