InputNumber

受约束的数值录入框,含步进按钮、键盘步进、精度与范围 clamp,复用 Input 视觉。

设计文档

如何引入

import { InputNumber } from '@chenzy-design/svelte';

基础用法

支持格式化、滚轮调值、strict 越界模式、两侧按钮、内嵌按钮、前后缀。

数值:3
金额:12000(长按 +/- 连续增减)
滚轮调值(聚焦后滚动)+ 聚焦全选:50
strict 越界拒绝回滚;boundaryHit:—
controlsPosition=sides 两侧按钮:2
innerButtons 内嵌按钮(hover/聚焦显形)
¥
prefix/suffix 前后缀(string)
%
suffix 用 Snippet 自定义渲染
locale=de-DE 千分位(无 formatter 时走 Intl)

基础数字输入

最小最大值限制、两侧按钮布局、前后缀装饰。

数值:3
两侧按钮
¥
前后缀

范围与步进

min/max 限制、step/shiftStep 步进、strict 越界拒绝。

°C
16~30,步进 0.5:20
%
Shift+方向键 ±20:50
strict 越界拒绝(0~5):0

小数精度

precision 控制小数位数,自动四舍五入归一化。

¥
precision 2:9.9
precision 4:3.14159
kg
precision 0(取整):1.5

格式化与解析

formatter/parser 实现千分位、货币、百分比显示。

千分位:1234567
货币:8800
百分比:0.25

尺寸与状态

small/large 尺寸、内嵌按钮、disabled/readonly 状态。

small:1
large:3
内嵌按钮(hover 显形):8
disabled
readonly

步进器显隐

innerButtons 内嵌步进器(hover/focus 显示),hideButtons 彻底隐藏。

小时
innerButtons 内嵌步进器
hideButtons 隐藏步进器

纯数字回调

onNumberChange 携带 number 类型的值,配合 formatter 实现千分位纯数字输入。

千分位显示,onNumberChange 得纯数字:(空)

科学计数法

scientificNotation 失焦显示科学计数法,聚焦显示完整数字;可自定义阈值。

默认阈值 15 位
自定义阈值 10 位(聚焦看完整数字)

货币展示

currency + localeCode 按地区展示对应货币,currencyDisplay 控制符号/代码/名称。

按 localeCode 展示对应货币
currencyDisplay:symbol / code / name

隐藏货币符号

showCurrencySymbol=false 隐藏内置符号,配合 prefix/suffix 自行展示货币。

showCurrencySymbol=false + prefix/suffix 自定义
人民币

API 参考

InputNumber

Props

属性说明类型默认值
value受控值;提供则为受控number | nullundefined
defaultValue非受控初始值number | nullnull
minnumber-Infinity
maxnumberInfinity
stepnumber1
shiftStepShift+↑↓ 步长numberstep * 10
precision失焦四舍五入保留小数位numberundefined
boundaryMode越界处理:钳制 / 拒绝回滚'clamp'|'strict'clamp
formatter自定义显示格式化(仅非编辑态)(n: number) => stringundefined
parser自定义解析(s: string) => numberundefined
size'small'|'default'|'large'default
disabledbooleanfalse
readonlybooleanfalse
status'default'|'warning'|'error'default
controls是否显示步进按钮booleantrue
controlsPosition步进按钮布局:右侧 stacked / 两侧'right'|'sides'right
innerButtons按钮内嵌悬浮(hover/focus 显形)booleanfalse
keyboard是否启用 ↑↓/PageUp·Down 步进booleantrue
mouseWheel聚焦时滚轮步进booleanfalse
placeholderstringundefined
prefix输入框前置内容(如货币符号、单位)string | Snippetundefined
suffix输入框后置内容(如单位 %、kg)string | Snippetundefined
namestringundefined
idinput 元素 id,关联外部 labelstring自动生成
ariaLabelstringundefined
autofocus挂载自动聚焦booleanfalse
selectOnFocus聚焦时全选文本booleanfalse
locale数字格式化 locale(仅未提供 formatter 时生效)stringundefined
borderless无边框模式booleanfalse
showClear显示清除按钮(有值时出现 ×)booleanfalse
clearIcon自定义清除图标Snippetundefined
keepFocus点击 +/- 按钮后保持输入框聚焦booleanfalse
onChange归一化后值变化(v: number | null) => voidundefined
onNumberChange携带 number 类型的变化回调(区别于 onChange)(v: number | null) => voidundefined
onBoundaryHit触达/试图越过边界(e: { boundary: 'min'|'max'; value: number }) => voidundefined
hideButtons彻底隐藏步进按钮(对齐 Semi;优先于 controls)booleanfalse
preventScroll命令式 focus() 时是否阻止滚动文档(对齐 Semi)booleanfalse
pressTimeout长按后延迟多久开始连续步进(ms,对齐 Semi)number250
pressInterval长按连续步进的间隔(ms,对齐 Semi)number250
scientificNotation失焦时超阈值(默认 15 位)显示科学计数法,聚焦显示完整数字;仅影响显示,onChange/onNumberChange 仍为完整 number(对齐 Semi)boolean | { threshold?: number }false
currency货币展示:true 按 localeCode 自动推断币种,字符串(CNY/EUR/USD/JPY…)指定币种码;Intl.NumberFormat currency 格式化,仅显示层,值仍为完整 number(对齐 Semi)boolean | stringfalse
currencyDisplay货币展示方式:符号 ¥ / 代码 CNY / 名称 人民币(对齐 Semi)'symbol'|'code'|'name''symbol'
localeCode货币格式化 BCP-47 locale(zh-CN/de-DE/ja-JP…),决定千分位/小数位/符号位置;回退 locale 再回退 zh-CN(对齐 Semi)stringundefined
showCurrencySymbolfalse 时隐藏内置货币符号/代码/名称(用 decimal 千分位),供 prefix/suffix 自行展示(对齐 Semi)booleantrue
class根节点自定义类名(对齐 Semi className)stringundefined
style根节点自定义内联样式(对齐 Semi style)stringundefined

Events

事件载荷说明
change{ value: number | null }归一化后值变化(受控核心事件)
boundaryHit{ boundary: 'min'|'max'; value: number }触达/试图越过边界
step{ value: number; direction: 'up'|'down'; source: 'button'|'keyboard'|'wheel' }任一步进动作完成
focusFocusEvent聚焦
blurFocusEvent失焦(已完成 commit 归一化)
keydownKeyboardEvent透传原生 keydown

Methods

属性类型说明
focus()命令式聚焦输入框(尊重 preventScroll,对齐 Semi)
blur()命令式移除焦点(对齐 Semi)

Accessibility

ARIA rolespinbutton
键盘交互ArrowUpArrowDownShift+ArrowUpShift+ArrowDownPageUpPageDownEnter
  • input role=spinbutton + aria-valuenow/valuemin/valuemax
  • 失焦按 precision 四舍五入并 clamp 到 [min,max]
  • 到 min/max 时对应步进按钮 disabled
  • 步进按钮 tabindex=-1,mousedown.preventDefault 不夺焦
  • disabled→aria-disabled,readonly→aria-readonly,error→aria-invalid

设计变量

变量默认值用法
--cd-transition-delay-input-bg var(--cd-motion-delay-none)输入框-背景色-延迟时间
--cd-transition-delay-input-border var(--cd-motion-delay-none)输入框-边框-延迟时间
--cd-transition-delay-input-text var(--cd-motion-delay-none)输入框-文字或图标-延迟时间
--cd-transition-duration-input-bg var(--cd-motion-duration-none)输入框-背景色-动画持续时间
--cd-transition-duration-input-border var(--cd-motion-duration-none)输入框-边框-动画持续时间
--cd-transition-duration-input-text var(--cd-motion-duration-none)输入框-文字或图标-动画持续时间
--cd-transition-function-input-bg var(--cd-motion-ease-in)输入框-背景色-过渡曲线
--cd-transition-function-input-border var(--cd-motion-ease-in)输入框-边框-过渡曲线
--cd-transition-function-input-text var(--cd-motion-ease-in)输入框-文字或图标-过渡曲线