uniapp实现的Tab 选项卡组件模板

采用 uniapp 实现的一款简约美观的 tabs 标签页组件模板,纯 CSS、HTML 实现,具备丝滑的过渡切换效果,用户完全可根据自身需求进行更改、扩展

适配 web、H5、微信小程序(其他平台小程序未测试过,可自行尝试)

可到插件市场下载尝试:https://ext.dcloud.net.cn/plugin?id=25722

  • 示例

props 属性

tabOptions

选项卡 tab 数组,必须具备 type、title 字段

js 复制代码
tabOptions: {
  type: Array,
  default() {
    return [
      {
        type: "send",
        title: "火车票",
      },
      {
        type: "receive",
        title: "机票",
      },
    ];
  },
},

defaultTab

默认选中 tab

js 复制代码
defaultTab: {
  type: String,
  default: "send",
},

事件

@onChange

切换 tab 时触发

使用示例

vue2 写法

js 复制代码
<template>
  <view class="card">
    <tabsComp
      :tabOptions="tabOptions"
      :defaultTab="defaultTab"
      @onChange="onChangeTab"
    >
      <view>
        <view
          v-if="tabValue === 'send'"
          style="height: 300rpx"
          class="flex-center"
        >
          火车票模块
        </view>
        <view
          v-if="tabValue === 'receive'"
          style="height: 300rpx"
          class="flex-center"
        >
          机票模块
        </view>
      </view>
    </tabsComp>
  </view>
</template>
<script>
import tabsComp from "./components/tabs-comp.vue";
export default {
  components: {
    tabsComp,
  },
  data() {
    return {
      defaultTab: "send", // 默认选中的tab
      tabOptions: [
        {
          type: "send",
          title: "火车票",
        },
        {
          type: "receive",
          title: "机票",
        },
      ],
      tabValue: "send", // 当前选中的tab
    };
  },
  methods: {
    onChangeTab(type) {
      this.tabValue = type;
    },
  },
};
</script>

<style lang="scss" scoped>
.flex-center {
  display: flex;
  justify-content: center;
  align-items: center;
}
.card {
  padding: 40rpx 20rpx;
  background-color: #f5f5f5;
  height: 100%;
}
</style>

vue3 写法

js 复制代码
<template>
  <view class="card">
    <tabsComp
      :tabOptions="tabOptions"
      :defaultTab="defaultTab"
      @onChange="onChangeTab"
    >
      <view>
        <view
          v-if="tabValue === 'send'"
          style="height: 300rpx"
          class="flex-center"
        >
          火车票模块
        </view>
        <view
          v-if="tabValue === 'receive'"
          style="height: 300rpx"
          class="flex-center"
        >
          机票模块
        </view>
      </view>
    </tabsComp>
  </view>
</template>
<script setup>
import { ref } from "vue";
import tabsComp from "./components/tabs-comp.vue";

const defaultTab = "send"; // 默认选中的tab
const tabOptions = [
  {
    type: "send",
    title: "火车票",
  },
  {
    type: "receive",
    title: "机票",
  },
];
const tabValue = ref(defaultTab);

function onChangeTab(type) {
  tabValue.value = type;
}
</script>

<style lang="scss" scoped>
.flex-center {
  display: flex;
  justify-content: center;
  align-items: center;
}
.card {
  padding: 40rpx 20rpx;
  background-color: #f5f5f5;
  height: 100%;
}
</style>
相关推荐
0思必得09 分钟前
[Web自动化] Selenium处理滚动条
前端·爬虫·python·selenium·自动化
Misnice11 分钟前
Webpack、Vite、Rsbuild区别
前端·webpack·node.js
青茶36012 分钟前
php怎么实现订单接口状态轮询(二)
前端·php·接口
大橙子额1 小时前
【解决报错】Cannot assign to read only property ‘exports‘ of object ‘#<Object>‘
前端·javascript·vue.js
爱喝白开水a2 小时前
前端AI自动化测试:brower-use调研让大模型帮你做网页交互与测试
前端·人工智能·大模型·prompt·交互·agent·rag
董世昌412 小时前
深度解析ES6 Set与Map:相同点、核心差异及实战选型
前端·javascript·es6
吃杠碰小鸡3 小时前
高中数学-数列-导数证明
前端·数学·算法
kingwebo'sZone4 小时前
C#使用Aspose.Words把 word转成图片
前端·c#·word
xjt_09014 小时前
基于 Vue 3 构建企业级 Web Components 组件库
前端·javascript·vue.js
游戏开发爱好者84 小时前
日常开发与测试的 App 测试方法、查看设备状态、实时日志、应用数据
android·ios·小程序·https·uni-app·iphone·webview