# Tab 切换组件 一个功能完整的 Tab 切换组件,支持动画过渡、自定义内容和响应式设计。 ## 功能特性 - ✅ **多标签切换**:支持任意数量的标签页切换 - ✅ **动画指示器**:选中状态下划线,支持平滑滑动动画 - ✅ **自定义内容**:支持插槽自定义标签内容 - ✅ **响应式设计**:适配不同屏幕尺寸 - ✅ **动态宽度**:下划线宽度根据文字宽度动态调整 - ✅ **事件支持**:完整的切换事件和双向绑定 - ✅ **主题定制**:支持自定义指示器颜色 - ✅ **uniapp 兼容**:使用 uniapp 内置组件开发 ## 基础用法 ```vue ``` ## 自定义标签内容 使用 `tab-item` 插槽可以完全自定义标签的显示内容: ```vue ``` ## 双向绑定 支持 `v-model` 双向绑定当前选中的索引: ```vue ``` ## 动态标签 支持动态添加和删除标签: ```vue ``` ## Props | 参数 | 类型 | 默认值 | 说明 | |------|------|--------|------| | tabs | Array | `[{label:'全部订单',value:'all'},{label:'服务工单',value:'service'}]` | 标签数据数组 | | defaultActive | Number | `0` | 默认选中的标签索引 | | indicatorColor | String | `#007AFF` | 指示器颜色 | | modelValue | Number | - | 当前选中索引(用于 v-model) | ### tabs 数组项结构 ```typescript interface TabItem { label: string // 标签显示文本 value: string // 标签值 [key: string]: any // 其他自定义属性 } ``` ## Events | 事件名 | 说明 | 参数 | |--------|------|------| | change | 标签切换时触发 | `{ index: number, item: TabItem }` | | update:modelValue | 用于 v-model 双向绑定 | `index: number` | ## Slots | 插槽名 | 说明 | 作用域参数 | |--------|------|------------| | tab-item | 自定义标签内容 | `{ item: TabItem, index: number, isActive: boolean }` | ## 方法 通过 `ref` 可以调用组件的方法: ```vue ``` | 方法名 | 说明 | 参数 | 返回值 | |--------|------|------|--------| | setActiveIndex | 设置当前选中的标签 | `index: number` | - | | getActiveIndex | 获取当前选中的标签索引 | - | `number` | | getActiveItem | 获取当前选中的标签项 | - | `TabItem` | ## 样式定制 ### CSS 变量 组件支持通过 CSS 变量进行样式定制: ```scss .tab-container { --tab-bg-color: #fff; // 背景色 --tab-text-color: #666; // 文字颜色 --tab-active-color: #333; // 选中文字颜色 --tab-indicator-color: #007AFF; // 指示器颜色 --tab-border-color: #f0f0f0; // 边框颜色 } ``` ### 自定义主题 ```vue ``` ## 技术实现 - **框架**:Vue 3 组合式 API - **平台**:uniapp 跨平台开发 - **动画**:CSS3 transition + transform - **响应式**:CSS media queries - **兼容性**:微信小程序、H5、App ## 设计规范 - 遵循微信小程序设计规范 - 支持无障碍访问 - 响应式设计,适配不同设备 - 流畅的动画过渡效果 - 一致的视觉风格 ## 兼容性 | 平台 | 支持情况 | |------|----------| | 微信小程序 | ✅ 完全支持 | | H5 | ✅ 完全支持 | | App | ✅ 完全支持 | | 支付宝小程序 | ✅ 完全支持 | | 百度小程序 | ✅ 完全支持 | ## 更新日志 ### v1.0.0 - ✨ 初始版本发布 - ✨ 支持基础标签切换功能 - ✨ 支持动画指示器 - ✨ 支持自定义标签内容 - ✨ 支持响应式设计 - ✨ 支持事件和双向绑定 ## 备注 仅供学习、交流使用,请勿用于商业用途。