Skip to content

Barcode 条码 ​

基于纯 TypeScript 零依赖编码器(自研)的一维条码组件,第一期覆盖 6 码制(CODE128 / EAN-13 / EAN-8 / UPC-A / CODE39 / ITF-14),输出内联 SVG,可扫码、可下载。

基础用法 ​

基础条码

value 支持任意文本(CODE128 auto 子集自动切换);整体宽度由内容决定(位数 × 码制 × bar-width + 静区)——组件不设 size/width 属性,这是与二维码组件最大的 API 差异。

码制 ​

第一期 6 码制

format:code128(默认,auto A/B/C)/ ean13 / ean8 / upca / code39 / itf14,非法值回退 code128。EAN/UPC 系给 12/7/11/13 位数据时**自动补算校验位**,给全码则校验末位合法性;EAN-13 首位数字与 UPC-A 首末位按标准渲染在护条外侧,护条向下延伸。CODE39 自动大写化;ITF-14 为固定 13+1 位箱码。

条宽与高度 ​

bar-width / height

bar-width 是可扫性的第一参数(X-dimension,默认 2,下限 1);height 只控制条高(默认 100,不含文字区)。缩短条高会降低扫码枪首读率,打印标签建议保持默认。

人读文字(HRI) ​

display-value / text-position / 字号与间距

display-value 默认显示人读文字(显式 display-value="false" 关闭);text-position 为 bottom(默认)/ top;font-size(默认 16)与 text-margin(默认 4)控制文字区几何。文字使用 generic sans——条码标准字体 OCR-B 无自由许可不内嵌,宿主可自行 @font-face 引入后经 ::part(text) 覆盖。

颜色与暗色可扫性 ​

color / bg-color 定制

条色 color 缺省固定深色 #18181b,支持任意 CSS 色值或 11 个预设名;静区底色 bg-color 默认固定纯白——条码可扫性优先于主题一致性,dark 主题下同样可扫(也可用 --oas-barcode-bg 变量全局覆盖)。对比度警示:红外扫码枪对红色系条不可扫(红 = 白),自定义条色请保持「深条浅底」。

静区(可扫性硬约束) ​

margin 静区

margin 是左右静区(px,缺省即 10 × bar-width——默认产物即可扫,不依赖宿主设置)。扫码枪要求条码两侧有足够空白,否则拒读——组件内建护栏:显式值低于 10 × bar-width 时收敛到下限并 console.warn 一次,宿主可加大、不可破坏。护栏只保下限——具体部署场景(打印尺寸、扫描距离、扫码枪型号)对静区的物理要求由宿主按实际情况评估。

非法输入反馈 ​

oas-invalid 事件(错误占位 + 事件接管)

生成条码

改成非法内容(如字母、位数不足、校验位错)再点「生成条码」——组件渲染错误占位并派发 oas-invalid。

非法输入分三类,oas-invalid 事件的 detail.reason 逐一对应:charset(字符集不符,如 EAN 传字母)、length(位数不符)、checksum(校验位不符)。宿主可接管提示(demo 中显示原因),组件自身始终渲染错误占位兜底。

下载 PNG ​

download() 离屏 rasterize 下载

下载 PNG点击按钮下载 4 倍清晰度 PNG(静区/颜色/文字与屏幕渲染一致)

download() 把当前条码离屏栅格化为 PNG 触发下载——渲染层保持 SVG-only(矢量 + SSR 快照一致性),不引入常驻 canvas;非法或空值静默返回,不产出不可扫的图。

空态 ​

空 value

value 为空时显示「暂无内容」占位。

无障碍 ​

aria-label

图形元素 `role="img"`;`aria-label` 属性优先,缺省走 locale 默认文案(中文「条码」/ 英文「Barcode」),可被屏幕阅读器读出。组件无键盘交互(纯展示件,不入 tab 序)。

API ​

oas-barcode ​

属性 ​

属性说明类型默认值
aria-label图形元素(svg,role="img")可访问名称,缺省走 i18n——
bar-width条宽 X-dimension(px,默认 2,下限 clamp ≥1)string2
bg-color静区底色(默认白色——扫码器要求浅色静区,dark 主题下保持白底保证可扫;--oas-barcode-bg 变量可覆盖)string—
color条色(默认固定深色 #18181b——与固定白底配套保证 dark 可扫;--oas-barcode-color 变量或预设名/任意色值覆盖)string—
display-value人读文字显隐(默认显示;显式 "false" 关闭)string—
font-size人读文字字号(px,默认 16)string16
format码制:code128(默认,auto A/B/C 子集自动切换)/ ean13 / ean8 / upca / code39 / itf14(非法值回退 code128)stringcode128
height条高(px,默认 100,不含文字区与护条延伸)string100
margin左右静区(px,缺省即 10 × bar-width——默认即可扫);显式值低于 10 × bar-width 时收敛到下限并 console.warn 一次(可扫性护栏)——
text-margin文字与条间距(px,默认 4)string4
text-position人读文字位置:bottom(默认)/ topstringbottom
value条码内容(空值走空态占位)string—

事件 ​

事件说明
oas-invalid非法输入渲染错误占位时派发,detail { reason }:charset(字符集不符)/ length(位数不符)/ checksum(校验位不符);同一非法输入只派发一次

CSS 变量 ​

CSS 变量默认值
--oas-barcode-bg#ffffff
--oas-barcode-color#18181b

基于 MIT OR Apache-2.0 双许可发布