更新记录

1.0.0(2025-04-05) 下载此版本

此版本为初始化版本 后期会更新。


平台兼容性

Vue2 Vue3
App 快应用 微信小程序 支付宝小程序 百度小程序 字节小程序 QQ小程序
HBuilderX 3.96 ×
钉钉小程序 快手小程序 飞书小程序 京东小程序 鸿蒙元服务
× × × × ×
H5-Safari Android Browser 微信浏览器(Android) QQ浏览器(Android) Chrome IE Edge Firefox PC-Safari
×

xl-tabs 标签页组件

一个简单、易用且高度可定制的标签页组件,适用于 uni-app 项目。

特性

  • ✨ 简单易用:使用 v-model 轻松控制当前选项卡
  • 🚀 切换动画:内置平滑的切换动画和加载状态
  • 📊 徽标支持:可显示数字徽标或红点
  • 🎨 高度可定制:可自定义样式、固定位置等

安装方式

从插件市场安装(推荐)

在 uni-app 插件市场搜索 "xl-tabs" 并安装。

手动安装

复制 components/xl-tabs 目录到你的项目中。

基本用法

<template>
  <xl-tabs v-model="activeTab" :tabs="tabs" @change="handleTabChange"></xl-tabs>
</template>

<script setup>
import { ref } from 'vue';

const activeTab = ref(0);
const tabs = ref(['选项1', '选项2', '选项3']);

const handleTabChange = (index) => {
  console.log('当前选中的选项卡索引:', index);
};
</script>

带徽标的用法

<template>
  <xl-tabs v-model="activeTab" :tabs="tabsWithBadge" :show-badge="true"></xl-tabs>
</template>

<script setup>
import { ref } from 'vue';

const activeTab = ref(0);
const tabsWithBadge = ref([
  { label: '消息', badge: 5 },
  { label: '联系人', badge: 0 },
  { label: '设置', badge: 12 }
]);
</script>

带加载进度条的用法

在数据加载过程中显示底部进度条动画,提升用户体验:

<template>
  <xl-tabs 
    v-model="activeTab" 
    :tabs="tabs" 
    :show-loading="isLoading"
    @change="handleTabChange">
  </xl-tabs>
</template>

<script setup>
import { ref } from 'vue';

const activeTab = ref(0);
const tabs = ref(['选项1', '选项2', '选项3']);
const isLoading = ref(false);

const handleTabChange = async (index) => {
  // 开始显示加载进度条
  isLoading.value = true;

  try {
    // 执行异步数据加载
    await fetchData(index);
  } finally {
    // 数据加载完成后,隐藏加载进度条
    isLoading.value = false;
  }
};

const fetchData = async (index) => {
  // 模拟数据加载延迟
  return new Promise(resolve => {
    setTimeout(() => {
      console.log(`已加载第${index+1}个标签的数据`);
      resolve();
    }, 1500);
  });
};
</script>

属性

属性名 类型 默认值 说明
modelValue Number 0 当前选中标签的索引,可使用 v-model 绑定
tabs Array [] 标签数组,可以是字符串数组或对象数组
showLoading Boolean true 是否显示标签切换时的加载动画
switchDelay Number 300 切换标签的延迟时间(毫秒)
showBadge Boolean false 是否显示徽标
badgeKey String 'badge' 徽标属性的名称
tabClass String '' 自定义标签的类名
activeTabClass String '' 自定义活动标签的类名
sticky Boolean true 是否将标签栏固定在页面顶部
zIndex Number 99 固定时的 z-index 值
useDot Boolean false 使用红点样式而不是数字徽标

事件

事件名 说明 参数
update:modelValue 更新当前选中标签的索引 index: 当前选中标签的索引
change 标签切换时触发 index: 当前选中标签的索引
click 点击标签时触发 index: 点击的标签索引

样式定制

组件使用 SCSS 编写,你可以通过覆盖以下类名来自定义样式:

  • .xl-tabs-container:标签容器
  • .xl-tab-item:标签项
  • .xl-tab-item.active:活动标签项
  • .xl-tab-badge:徽标
  • .xl-tab-loading:加载动画

自定义加载进度条样式

:deep(.xl-tab-loading) {
  /* 修改加载条背景 */
  background-color: rgba(0, 0, 0, 0.05);
  height: 6rpx; /* 调整高度 */
}

:deep(.xl-tab-loading .loading-bar) {
  /* 修改加载条颜色 */
  background-color: #ff6b6b;
}

注意事项

  • 如果使用对象数组作为 tabs,对象中必须包含 label 属性作为标签文本
  • 如果想显示徽标,请将 showBadge 设置为 true,并确保对象中包含相应的徽标属性

示例

自定义样式

<template>
  <xl-tabs 
    v-model="activeTab" 
    :tabs="tabs" 
    tab-class="my-custom-tab" 
    active-tab-class="my-active-tab"
  ></xl-tabs>
</template>

<style lang="scss">
.my-custom-tab {
  font-size: 32rpx;
  color: #333;
}

.my-active-tab {
  color: #ff6b6b;

  &::after {
    background-color: #ff6b6b;
  }
}
</style>

使用红点而不是数字徽标

<template>
  <xl-tabs 
    v-model="activeTab" 
    :tabs="tabsWithBadge"
    :show-badge="true"
    :use-dot="true"
  ></xl-tabs>
</template>

版本历史

1.0.0

  • 初始版本发布

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

暂无用户评论。

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问