n-swipe-action-item 滑动单元格
按 direction 配置左滑展开右侧主菜单或右滑展开左侧主菜单;补充 reverseOptions 或 reverseButton 插槽后同一行可双向滑动。手势、宽度变化、互斥、禁用和内容点击防误触均由组件处理,可单独使用。
平台兼容性
| App | Web | 微信小程序 |
|---|---|---|
| √ | √ | √ |
API
属性
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| direction | 主菜单展开方向:left 左滑展开右侧菜单,right 右滑展开左侧菜单 | NSwipeActionDirection | left |
| modelValue | 可选的开合绑定;null 时组件自行管理,绑定布尔值时使用 v-model,true 表示任一菜单展开 | boolean / null | null |
| name | click、change、error 回传的业务标识,动态列表建议使用稳定 id | string / number | |
| options | 主菜单按钮,从左到右排列;button 插槽存在时忽略 | NSwipeActionOption[] | [] |
| reverseOptions | 反方向菜单按钮,提供后该行可双向滑动;reverseButton 插槽存在时忽略 | NSwipeActionOption[] | [] |
| disabled | 禁用菜单滑动、展开和点击;内容插槽自身交互仍可用 | boolean | false |
| autoClose | 是否参与组内互斥;false 时该行独立开合 | boolean | true |
| threshold | 松手吸附距离 px;-1 使用组设置,独立使用时为 20 | number | -1 |
| duration | 松手吸附过渡时长 ms;拖动时无过渡,0 为即时落位 | number | 300 |
| closeOnClick | 点击数据菜单按钮后自动收起;自定义菜单通过插槽 close 收起 | boolean | true |
| fontSize | 数据菜单统一字号 px;0 跟随主题,单项 fontSize 可覆盖 | number | 0 |
| contentStyle | 内容容器行内样式 | string | |
| buttonStyle | 数据菜单按钮容器行内样式,两侧菜单共用 | string | |
| textStyle | 数据菜单文字行内样式,两侧菜单共用 | string | |
| customClass | 根节点额外类,须在组件样式表中定义 | string | |
| customStyle | 根节点行内样式 | string |
事件
| 事件名 | 说明 | 回调参数 |
|---|---|---|
| update:modelValue | 请求开合,供可选 v-model 使用 | boolean |
| change | 实际开合变化 | NSwipeActionChange: |
| click | 数据菜单点击,禁用不触发 | NSwipeActionClick: |
| error | 配置或测量错误,index=-1 表示整行 | NSwipeActionError: |
插槽
| 名称 | 说明 |
|---|---|
| default | 业务内容;参数 {open: boolean, close},展开后点击仅收起菜单,不触发内容点击 |
| button | 主菜单整组接管,忽略 options;参数 |
| reverseButton | 反向菜单整组接管,忽略 reverseOptions;参数 |
方法
| 名称 | 说明 |
|---|---|
| open | 展开菜单;参数 side 可选("main" 主菜单 / "reverse" 反向菜单),缺省主菜单 |
| close | 收起并取消拖动 |
| toggle | 切换指定菜单开合;参数同 open,当前另一侧展开时切换到指定侧 |
菜单数据
NSwipeActionOption:text 为非空文字,bg、color 为可选颜色,fontSize 为可选正数,disabled 为可选布尔值。公开类型均可从库入口导入,不依赖加密实现目录。
样式
主题令牌依次支持运行时 CSS 变量、编译时 SCSS 覆盖和库默认值。font-size=0 时使用主题字号,不写行内默认颜色与字号。
| CSS 变量 | 默认值 |
|---|---|
| --n-swipe-btn-bg | #ef4444 |
| --n-swipe-btn-color | #ffffff |
| --n-swipe-btn-font-size | 14px |
| --n-swipe-btn-padding-x | 18px |
| --n-swipe-btn-pressed-opacity | 0.75 |
| --n-swipe-btn-disabled-opacity | 0.5 |
| --n-swipe-disabled-opacity | 0.5 |
内部节点可用 content-style、button-style、text-style。自定义 button / reverseButton 插槽的图标和外观由调用方提供,宽度测量、禁用和互斥由组件处理。
实现说明
| 参考做法 | 本组件做法 | 分歧理由 |
|---|---|---|
| 分组管理、自动关闭、禁用和吸附距离 | 容器统一提供 autoClose、disabled、threshold;成员可覆盖距离或退出互斥 | 普通列表只需配置一次,成员独立使用也完整 |
| show 属性控制及内部手势开合 | 可选 v-model,未绑定时自行管理,同时保留方法 | 遵循官方组件双向绑定,常见用法无需 ref |
| 组实例按索引 open/close 指定行 | 成员 v-model 与 open/close/toggle 方法承担,v-for 配 v-model 数组即可按行控制 | 动态列表维护索引与成员的对应关系易错,受控绑定由渲染层保证一致 |
| 组级 click 点击事件 | 内容点击由内容插槽自身事件承接,菜单点击走本组件 click | 点击语义属业务内容,容器转发无法携带内容上下文 |
| 菜单数据、单项颜色字号、整组插槽 | options / reverseOptions 与 button / reverseButton 插槽,主题令牌及内部样式属性 | 数据驱动常见用法零模板,插槽保留全定制 |
| 左右两侧独立插槽 | reverseOptions / reverseButton 表达反向菜单,direction 决定主菜单侧 | 数据与插槽两通道对称,主菜单行为与单侧用法完全一致 |
| 实测菜单宽度 | 复用内部尺寸监听,内容与主题变化自动跟随 | 不使用文字估宽;隐藏停止监听,异步旧结果失效 |
| 内容和菜单同行平移 | 根裁剪,轨道允许超界,菜单常驻 | 菜单可见且可点击,内容插槽状态保留 |
| 吸附距离按菜单宽度比例(默认 0.3) | threshold 为像素值,自动收敛到菜单半宽以内 | 像素值直观可预估;短菜单下比例阈值过小不易触发,半宽上限兜底 |
| 行组件自带上下间距属性 | 间距走 customStyle(margin 任意方向) | 布局间距由调用方统一管理,避免与列表节奏冲突 |
| 手势方向锁与吸附 | 单指跟踪、纵向放行、横向阻止默认行为、取消恢复原状态 | 避免多指锁死及取消手势误展开 |
- direction="left" 为左滑展开右侧主菜单,direction="right" 为右滑展开左侧主菜单;配置 reverseOptions 或 reverseButton 后同一行可双向滑动,松手按拖出侧分别吸附,一侧展开时另一侧菜单不参与。切换方向会取消进行中的拖动并按当前开合态重新定位。
- 动态列表使用稳定业务 id 作为 key。关闭组互斥后可多行展开,重新开启时保留最后操作的参与成员;成员 auto-close=false 时独立开合。
- 展开后透明内容覆盖层拦截收起点击,调用方无需维护防误触状态。收起时内容插槽交互不受影响。
- 配置非法时整体停止菜单交互并派发 error(side 定位出错菜单);测量宽度不可用时不使用估算值。修正数据或重新显示内容后可继续操作。
- 切页、切后台和组级收起均取消拖动;独立成员也会自行处理隐藏生命周期。