组件/Picker 滚轮选择

Picker 滚轮选择

按列滚动选值的滚轮选择器

已验证自 0.3.4

用法

弹层、内联与紧凑行高

v-model:visible 控制弹层,popup="false" 内联渲染,itemHeight / visibleItemCount 调整行高与行数。

示例加载中...

最佳实践

  • modelValue 保持为与 columns 顺序一致的完整数组;稀疏数组会被归一化,但显式值更便于审计表单状态。
  • 列会重排或条件渲染时提供 column.key,避免 Vue 把旧列复用给不同数据。
  • 选项 value 使用稳定的原始值,展示文案放在 label。
  • 设置页常驻展示用内联(popup=false);移动端或短任务用弹层。
  • 不要提交禁用项的值:组件只在归一化或滚动恢复时跳过禁用项。

API 参考

属性

属性名类型默认值说明
modelValuePickerValue[]每列的选中值;缺失或非法时归一化到首个可用项。
columnsPickerColumn[][]从左到右的列定义。
visiblebooleanfalse弹层显示状态,配合 v-model:visible。
popupbooleantruetrue 时 Teleport 为底部弹层,false 时内联渲染。
titlestring''工具栏标题。
showToolbarbooleantrue显示取消、标题与确认工具栏。
confirmTextstring'Confirm'确认按钮文案。
cancelTextstring'Cancel'取消按钮文案。
disabledbooleanfalse禁用工具栏、选项与拖拽。
itemHeightnumber36行高(px),最小 24。
visibleItemCountnumber5可见行数;偶数向上取奇数,最小 3。
closeOnClickMaskbooleantrue点击遮罩关闭弹层。
lazyMountbooleantrue首次打开后再挂载弹层内容。

事件

事件名参数说明
update:modelValue(value: PickerValue)转动改变列值时触发。
change(value: PickerValue)与 update:modelValue 同时触发。
update:visible(visible: boolean)打开或关闭时触发。
confirm(value: PickerValue)点击确认时以当前值触发,随后关闭。
cancel-点击取消时触发,随后关闭。
open-打开时触发。
close-关闭时触发。

暴露方法

名称类型说明
open() => void写入 visible=true 打开弹层。
close() => void关闭弹层。
toggle() => void切换弹层。

类型

type PickerValue = Array<string | number>

PickerColumn,columns 中的一项:

字段类型说明
keystring可选的稳定 key。
optionsPickerOption[]该列的选项。

PickerOption,options 中的一项:

字段类型说明
valuestring | number该列派发的原始值。
labelstring显示文本。
disabledboolean禁止选择,归一化回退时跳过。

概述

  • 每一列是组件自己转动的滚筒,不是原生滚动容器;指针、滚轮、点击与键盘都由列处理。
  • 拖拽跟手,松手后按速度惯性滑行,以三次缓出停在最近的可用行;滚轮停止 120ms 后吸附。
  • 减少动态效果时拖拽仍然跟手,但没有惯性滑行,吸附不做缓动。
  • 受控父级回传的值若正是某列正转向的值,该列会转完这一圈,不会被重新放置。
  • 只绘制滚筒正面的行(默认 11 行,与列长无关);每行带 aria-setsize 与 aria-posinset,读屏不受影响。

技术实现

  • 行按与偏移量的距离 rotateX 排布在滚筒面上(默认 r = 116px、步进 17.6°、透视 348px);行不参与命中测试,点击位置由投影几何闭式反解到行。
  • 源码:packages/tuffex/packages/components/src/picker/。
查看源码
packages/tuffex/packages/components/src/picker/index.ts