Skip to content

QRCode 二维码 ​

基于纯 TypeScript 零依赖编码器(自研)的二维码组件,输出内联 SVG,可扫码、可下载。

基础用法 ​

基础二维码

value 支持任意文本(数字/字母数字/字节模式自动选择),默认尺寸 128px。

尺寸 ​

自定义尺寸

size 控制渲染宽高(最小 32,非法值回退 128);SVG 用 viewBox 缩放,任意尺寸均清晰。

纠错级别 ​

error-correction 四级别对比

error-correction 接受 l/m/q/h 四级别(默认 l),自研编码器全级别真实实现(v1–40 全版本),不再归一降级。级别越高容错越强(H 级约可容忍 30% 污损),同内容下码更密;中心 logo / 弱光扫码场景建议 q/h。

icon 中心 logo(搭配高纠错级别)

icon 为中心图片 URL(SVG 内嵌渲染,底部自动铺背景色托底);icon-size 默认 size/5(经验取值 ≤1/5),过大将吃掉纠错余量导致不可扫——logo 遮挡场景请用 q/h 级纠错。

颜色与暗色可扫性 ​

color / bg-color 定制

前景 color 缺省固定深色 #18181b(与固定白静区配套保证 dark 可扫,可用 --oas-qrcode-color 变量覆盖),可给任意 CSS 色值或 11 个预设名(如 blue → var(--oas-preset-blue));背景 bg-color 默认固定纯白——二维码可扫性优先于主题一致性,dark 主题下同样可扫(也可用 --oas-qrcode-bg 变量全局覆盖)。静区边距 margin 默认 4 模块(QR 标准静区要求)。

形状与渐变 ​

dot-shape 码点形状 / corner-shape 定位图形

dot-shape:square(默认)/ rounded / dots;corner-shape:square(默认)/ rounded(三处定位图形换圆角)。非法值静默回落 square。码点形状只改变渲染外观,不改模块矩阵与纠错编码。

gradient 渐变前景(覆盖 color)+ icon-hide-dots 挖空

gradient 传 JSON 数组(2–3 个色值,如 '["#0b6cff","#7c3aed"]'),按 gradient-angle(CSS 约定,0° 自下而上、90° 自左向右)线性渐变,生效时覆盖 color;非法值回落 color。icon-hide-dots 在中心 logo 覆盖区清空码点(避免点阵从半透明 logo 边缘透出)。可扫性提示:圆点/圆角与渐变会降低边缘对比度,弱光、低分辨率打印或长内容建议保持默认 dot-shape="square",或提高 error-correction 到 q/h。

状态(过期 / 加载 / 已扫描) ​

status 状态机(expired 点击刷新)

点击过期二维码上的「刷新」按钮触发 oas-refresh 事件(demo 中模拟刷新流程:loading → active)。

status 取值:active(默认)/ expired / loading / scanned。非 active 时盖覆盖层:expired 显示「已过期」+ 刷新按钮(点击派发 oas-refresh)、loading 显示加载动画(aria-busy)、scanned 显示「已扫描」。覆盖层内容可整体自定义:template[slot="status"] 克隆替换。

下载 PNG ​

download() 离屏 rasterize 下载

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

download() 把当前二维码离屏栅格化为 PNG 触发下载——渲染层保持 SVG-only(矢量 + SSR 快照一致性),不引入常驻 canvas;中心 logo 在栅格化阶段二次绘制(浏览器会拦截 SVG 内嵌外部图)。

空态与超长 ​

空 value

value 为空时显示「暂无内容」占位;内容超出所选纠错级别、版本 1–40 的容量(v40-L 字节容量 2953)时显示「内容过长」提示。

无障碍 ​

aria-label

图形元素 `role="img"`;`aria-label` 属性优先,缺省走 locale 默认文案(中文「二维码」/ 英文「QR code」),可被屏幕阅读器读出。

API ​

oas-qrcode ​

属性 ​

属性说明类型默认值
aria-label容器可访问名称,缺省走 i18n——
bg-color背景色(默认白色——扫码器要求浅色静区,dark 主题下保持白底保证可扫;--oas-qrcode-bg 变量可覆盖)string—
color前景色(码点颜色,默认固定深色 #18181b——与固定白静区配套保证 dark 可扫;--oas-qrcode-color 变量或预设名/任意色值覆盖)string—
corner-shape定位图形形状:square(默认,与模块栅格逐像素等价)/ rounded(三处定位图形换圆角)stringsquare
dot-shape码点形状:square(默认)/ rounded / dots(非法值静默回落 square)stringsquare
error-correction纠错级别 l/m/q/h(四级均已实现,默认 l;中心 logo 遮挡或弱光/污损场景建议 q/h)stringl
gradient渐变前景:JSON 数组(2–3 个色值,如 ["#0b6cff","#7c3aed"]),生效时覆盖 color(非法值回落 color)string—
gradient-angle渐变角度(CSS 约定:0° 自下而上、90° 自左向右,默认 45)string45
icon中心 logo 图片 URL(建议配合 error-correction="h" 保可扫性)string—
icon-hide-dots中心 logo 覆盖区的码点挖空(布尔属性,避免点阵从半透明 logo 边缘透出)boolean—
icon-size中心 logo 尺寸(px,默认 size/5, clamp 在 [16, size/2])——
margin静区边距(模块单位,默认 4)string4
size渲染宽高(px)string128
status状态机:active(默认)/ expired(过期遮罩,点击刷新派 oas-refresh)/ loading / scannedstringactive
value二维码内容文本string—

事件 ​

事件说明
oas-refresh过期态点击刷新按钮时派发,宿主重新赋值内容后切回 active

插槽 ​

名称说明
template[slot="status"]自定义状态覆盖层内容(缺省为各状态内建遮罩)

CSS 变量 ​

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

编码器函数(encodeQR / matrixToPath 等)由 @oas-ui/ui 导出,可直接用于 SSR 或自定义渲染。

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