Skip to content

Knob 旋钮 ​

把连续/离散数值编码为圆周角度的旋转输入控件,为参数密集面板(音频/工业/3D)而生:紧凑圆形 + 相对拖拽(无跳变)+ 双极零位。

基础用法 ​

基础用法

旋钮是紧凑的圆形输入控件:拖拽或键盘改值,值域线性映射到扫角(默认 225° → 495°,共 270°,底部留缺口,像面板旋钮的止档)。指针手势是相对语义:按下不写值、拖动跟随手(大范围调节不会像线性滑块的点击落点那样跳变)。

值域与步长 ​

min / max / step(step=0 视为连续)

min/max 定义值域(非法或 min > max 自动交换容错);step 吸附步长,0 或负数视为连续(不吸附)。越界值自动夹取。

扫角(start-angle / end-angle) ​

自定义扫角:300° 满圈感 / 半圆仪表

start-angle/end-angle 自定义扫角(0° = 12 点方向、顺时针,默认 225 → 495 即 270°、底部留缺口);end-angle 可大于 360(如 510 = 210° 起顺时针 300°);end-angle <= start-angle 时归一化为最小 1° 扫角(防除零)。

三档手势(interaction) ​

cursor 圆周跟随 / axis 线性拖拽 / auto 自动解析(默认)

  • cursor:指针绕轴心的方位角增量驱动值(顺时针增值),旋钮标识性手势;
  • axis:线性拖拽(默认 axis="vertical" 竖直、向上增值,150px 拖满量程;axis="horizontal" 切水平向右增值)——专业音频插件的通行惯例;
  • auto(默认):起手前几像素自动解析——主方向与偏好轴一致走线性、垂直于偏好轴走圆周,解析后一次锁定,同一次拖拽内不再切换(中途切换会跳值)。

所有手势均为相对语义:按下不写值、无移动点按零操作;主指针独占(第二指不接管);Shift 按住拖拽为 0.2× 精调。

复位(双击 / Ctrl+单击 / default-value) ​

双击或 Ctrl+单击复位到 default-value(缺省回落 min)

双击或 Ctrl/Cmd + 单击复位到 default-value;未设 default-value 时回落 min。复位派发 oas-reset(detail: { value, defaultValue }),不派发 oas-change(复位不是一次数值确认);readonly/disabled 下复位手势全封。程序性复位用 el.reset() 方法。

值弧与双极零位(include-arc + start-point) ​

include-arc 值弧;start-point=中心值即双极(pan/gain)

include-arc 显示值弧(从 start-point 缺省 min 端填到当前值);start-point 设为中心值即双极弧——值大于起点向一侧延伸、小于向另一侧延伸(pan/gain 以 12 点为中性位的音频惯例)。值与起点重合时值弧隐藏。

指示器(indicator) ​

line 指针(默认)/ dot 圆点

indicator="line" 为径向指针线(默认),indicator="dot" 为近缘圆点。

显示值(show-value / unit / format) ​

show-value 值文本 + unit 后缀 / format 模板串

show-value 在旋钮下方显示当前值;unit 作值后缀(Hz/%/dB);format 为模板串(${value} 占位)。格式化输出同时进 aria-valuetext(读屏播报与视觉同源);更复杂的格式化用 el.formatValue = (value) => string 函数 property(优先级最高,置 null 清除)。

尺寸 ​

size 三档(sm / md / lg),自定义直径走 CSS 变量

size 三档对应直径 sm=40px / md=56px(默认)/ lg=72px(也接受 small/medium/large 词表,支持 config-provider 全局注入),非法值回落 md;自定义直径直接覆盖 CSS 变量 --oas-knob-size。触屏(粗指针)下 sm 档自动抬到 44px 触控目标下限。

滚轮(wheel) ​

wheel 悬停滚轮调节(默认关)

wheel 开启后悬停滚轮即可调节(上滚增值、下滚减值,一格 = step;连续模式为量程的 1/50)。滚轮不做修饰键分支(恒按 step);精细调节用 Shift+拖拽(0.2×)。默认关闭(避免抢占页面滚动)。

反向(reverse) ​

reverse 反向:值扫描与圆周手势同步镜像(min 从 end-angle 端起)

reverse 反转值扫描方向(min → end-angle、max → start-angle),圆周手势与键盘左右键同步镜像;RTL 书写方向(dir="rtl")自动镜像,与 reverse 取异或。

键盘 ​

键盘大步进(large-step)

聚焦旋钮后:方向键 ± step(上下键恒为增/减值,左右键随镜像翻转)、Shift + 方向键与 PageUp/PageDown ± large-step(缺省 10 × step)、Home/End 到极值。每次按键即一次完整提交(派发 oas-input + oas-change),极值处按键安静(不派发事件)。

只读与禁用 ​

readonly 只读(不灰显)/ disabled 禁用(灰显、不可聚焦)

readonly 与 disabled 分立(同 slider 约定):只读旋钮仍可聚焦、值仍参与宿主收集,但拖拽/键盘/滚轮/复位全部拦截,视觉不降饱和;禁用旋钮不可聚焦(移除 tabindex)、aria-disabled="true"、灰显。

可访问名(label) ​

label 可访问名(不渲染可见标签,可见标签由 oas-form-item 承担)

查看 aria-label

label 写入旋钮的 aria-label(缺省回落内置文案「旋钮」)。旋钮不内置可见标签——用 oas-form-item 的 label 提供可见标签(点击可聚焦旋钮)。

事件 ​

拖拽 / 键盘 / 复位事件(oas-input 实时、oas-change 提交、oas-drag-* 起止、oas-reset 复位)

事件契约(detail 均带 value):

  • oas-input:拖拽中 / 滚轮 / 键盘每次改值(实时);
  • oas-change:松手提交 / 键盘、滚轮每次完整确认(取消与零变化松手不派发);
  • oas-drag-start:指针按下并发生有效移动(无移动点按不派发);
  • oas-drag-end:松手(cancelled: false)或取消(cancelled: true,此时不派发 oas-change);
  • oas-reset:双击 / Ctrl+单击 / reset() 复位后(detail: { value, defaultValue })。

触屏与边界 ​

  • Pointer Events 统一鼠标/触屏(touch-action: none 接管拖拽、主指针独占、pointercancel 取消回滚);
  • 拖拽中按 Esc 取消:回滚到起点值、零提交(不派发 oas-change);
  • 拖拽中的复位手势(双击 / Ctrl+单击)被忽略,指针捕获被外部夺走(lostpointercapture)即取消回滚;程序 reset() 在拖拽中调用则先取消拖拽再复位;
  • wheel 仅响应纵向滚动(deltaY),横向触控板平移不调值;
  • formatValue 函数抛错时自动降级到 format 模板 / unit 后缀 / 裸数字(渲染与手势不中断);
  • 拖拽中外部写 value:显示保持拖拽值,松手时若拖拽已产生提交则拖拽值落盘,零变化松手则外部值保留显示;
  • 触屏辅助技术对自定义 slider 手势的支持可能不完整(W3C ARIA APG 提示),移动端生产使用前请做真实 AT 测试。

API ​

oas-knob ​

属性 ​

属性说明类型默认值
axis线性拖拽轴:vertical(默认,向上增值、150px 拖满量程)/ horizontal(向右增值);interaction=auto 下作为偏好轴string—
default-value复位目标值:双击 / Ctrl+单击 / reset() 复位到此值(吸附+夹取);缺省回落 min;复位派发 oas-reset(不派发 oas-change)number | null—
disabled禁用:不可聚焦(移除 tabindex)、拖拽/键盘/滚轮/复位全封、aria-disabled="true"、灰显(opacity .6)boolean—
end-angle扫角终点(默认 495,即 270° 扫角、底部留缺口);可大于 360(如 510 = 210° 起顺时针 300°),sweep 上限 360——
format值格式化模板串:${value} 占位符替换为当前值(如 "${value} dB");输出同时进值文本与 aria-valuetext;优先级低于 formatValue 函数string—
include-arc显示值弧:从 start-point(缺省 min)端填到当前值;值与起点重合时弧隐藏(防 round linecap 出圆点)boolean—
indicator指示器形态:line(径向指针线,默认)/ dot(近缘圆点);非法值回落 linestring—
interaction手势模型:cursor(指针方位角增量驱动,顺时针增值)/ axis(线性拖拽)/ auto(默认——起手前几像素解析:主方向与偏好轴一致走线性、垂直走圆周,解析后一次锁定不中途切换);相对语义:按下不写值、无移动点按零操作、主指针独占stringauto
label旋钮可访问名(aria-label,不渲染可见标签——可见标签由 oas-form-item 承担);缺省回落内置 i18n 文案「旋钮」string—
large-step键盘大步步进量(Shift+方向键 / PageUp / PageDown 生效);缺省为 10 × step(连续模式为量程 / 10)string—
max值域上界(默认 100)string100
min值域下界(默认 0);非法或 min > max 自动交换容错string0
readonly只读(与 disabled 分立):仍可聚焦、值仍参与宿主收集,拖拽/键盘/滚轮/复位全部拦截,视觉不降饱和,aria-readonly="true"boolean—
reverse反向:值扫描镜像(min → end-angle、max → start-angle),圆周手势与键盘左右键同步镜像;与 RTL 书写方向取异或boolean—
show-value在旋钮下方显示当前值文本(经 formatValue 函数 / format 模板 / unit 后缀格式化,与 aria-valuetext 同源)boolean—
size尺寸三档:sm(40px)/ md(56px,默认)/ lg(72px),也接受 small / medium / large 词表(支持 config-provider 注入),非法值回落 md;自定义直径走 CSS 变量 --oas-knob-size;触屏下 sm 档自动抬到 44px 触控目标下限stringmedium
start-angle扫角起点(0° = 12 点方向、顺时针,默认 225);end-angle <= start-angle 时归一化为最小 1° 扫角——
start-point值弧起点(缺省/非法回落 min,自动夹取到值域);设为中心值即双极弧——值大于起点向一侧延伸、小于向另一侧延伸(pan/gain 双向零位)string—
step吸附步长(默认 1);0 或负数视为连续(不吸附)string1
unit值后缀(如 Hz/%/dB):输出进 show-value 值文本与 aria-valuetext;优先级低于 format 模板与 formatValue 函数string—
value当前值(受控):越界自动夹取到 [min, max] 并按 step 吸附;交互后写回属性(宿主可直接读属性取最新值)number0
wheel悬停滚轮调节(默认关):上滚增值、下滚减值,一格 = step(连续模式为量程 1/50);修饰键不改变步长(精调走 Shift+拖拽);开启后 preventDefault 阻止页面滚动boolean—

Property(JS property;是否写回 attribute 见各行说明) ​

Property说明类型默认值
defaultValue复位目标值:读 default-value 属性(未设返回 null = 回落 min);写数值反射到属性,写 null 清除number | null—
formatValue值格式化函数:el.formatValue = (value) => string,输出同时进 show-value 值文本与 aria-valuetext,优先级高于 format 属性与 unit 后缀,置 null 清除((value: number) => string | number | null | undefined) | null—
value当前值:读返回夹取+吸附后的数值(拖拽中为拖拽实时值),写为受控赋值即生效(写受控属性并强制同步,不派发事件)number—

事件 ​

事件说明
oas-change松手提交 / 键盘与滚轮每次完整确认派发,detail: { value };取消(Esc/pointercancel)与零变化松手不派发
oas-drag-end拖拽结束派发,detail: { value, cancelled };cancelled=true 表示取消路径(已回滚到起点值,不派发 oas-change)
oas-drag-start指针按下并发生有效移动(≥ 阈值)后派发,detail: { value }(起点值);无移动点按不派发
oas-input拖拽中 / 滚轮 / 键盘每次改值实时派发,detail: { value }(吸附后的当前值)
oas-reset复位手势(双击 / Ctrl+单击 / reset())后派发,detail: { value, defaultValue }

CSS 变量 ​

CSS 变量说明默认值
--oas-knob-body旋钮盘体颜色var(--oas-color-bg-elevated)
--oas-knob-fill值弧颜色(include-arc 开启时)var(--oas-color-primary)
--oas-knob-indicator指示器(指针线/圆点)颜色var(--oas-color-text-secondary-strong)
--oas-knob-size旋钮直径(尺寸档 sm=40px / md=56px / lg=72px 的档值载体,直接覆盖即自定义直径)56px
--oas-knob-track轨道弧颜色(全量程扫角弧)var(--oas-color-border)
--oas-knob-value-colorshow-value 值文本颜色var(--oas-color-text-secondary)

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