基于Vue3+UniApp在单个页面实现固定TabBar的多种方式

 更新时间:2025年03月21日 08:32:01   作者:码农研究僧  
tabBar 是移动端应用常见的页面效果,用于实现多页面的快速切换,本文给大家介绍了如何基于Vue3+UniApp在单个页面实现固定TabBar的多种方式,需要的朋友可以参考下

在 UniApp 开发中,tabBar 通常是通过 pages.json 配置的,适用于整个应用的全局导航

然而,在某些场景下,我们可能需要只在特定的页面展示 tabBar,而不会影响其他页面的布局。这就需要使用 自定义 tabBar,可以通过 view 组件、uni-segmented-control 组件或 uni-nav-bar 组件等方式来实现

以下是几种适用场景:

  • 局部页面导航:
    例如,一个订单管理页面,用户可以在 “进行中” 和 “已完成” 之间切换,而不影响全局 tabBar

  • 底部固定的二级导航:
    例如,在 “记录” 页面,提供 “待审核” 和 “已审核” 选项,方便用户切换,而不会影响其他页面

  • 顶部导航栏的切换:
    适用于不适合使用底部 tabBar 的场景,如数据管理页面,用户可以在 “待审核” 和 “已审核” 之间切换

方法适用场景说明
方法 1:自定义 view tabBar仅在某个页面底部适用于特定页面,不会影响全局 tabBar
方法 2:uni-segmented-control轻量级页面切换适用于简单的 Tab 选项,不会影响布局
方法 3:uni-nav-bar顶部导航切换适用于带顶部导航的 UI

1. 自定义 view

<template>
  <view class="container">


    <!-- 固定底部的 tabBar -->
    <view class="fixed-tabbar">
      <view class="tab-item" :class="{ active: currentTab === 0 }" @click="currentTab = 0">
        <text>测试A</text>
      </view>
      <view class="tab-item" :class="{ active: currentTab === 1 }" @click="currentTab = 1">
        <text>测试B</text>
      </view>
    </view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      currentTab: 0, // 当前选中的 tab
    };
  }
};
</script>

<style scoped>
.container {
  display: flex;
  flex-direction: column;
  height: 100vh;
}

.content {
  flex: 1;
  overflow-y: auto; /* 让内容可以滚动 */
  padding-bottom: 60px; /* 避免被底部 tabBar 遮挡 */
}

.fixed-tabbar {
  position: fixed;
  bottom: 0;
  left: 0;
  width: 100%;
  height: 50px;
  display: flex;
  justify-content: space-around;
  align-items: center;
  background-color: #fff;
  border-top: 1px solid #ddd;
}

.tab-item {
  flex: 1;
  text-align: center;
  padding: 10px;
  font-size: 14px;
  color: #666;
}

.tab-item.active {
  color: #007AFF;
  font-weight: bold;
}
</style>

截图如下:

fixed-tabbar 采用 position: fixed; bottom: 0;,始终固定在页面底部
使用 currentTab 变量控制当前选中的 tab,并根据 active 类名高亮
padding-bottom: 60px; 避免页面内容被 tabBar 遮挡

2. uni-segmented-control

以轻量级方式切换不同的页面内容,不需要固定的底部 tabBar

<template>
  <view>
    <!-- 顶部 Tab 切换 -->
    <uni-segmented-control
      :current="currentTab"
      :values="['测试A', '测试B']"
      @clickItem="switchTab"
    />

    <!-- 提柜记录 -->
    <view v-if="currentTab === 0">
      <uni-card title="测试A">
        <text>这里是测试A...</text>
      </uni-card>
    </view>

    <!-- 残损单记录 -->
    <view v-else>
      <uni-card title="测试B">
        <text>这里是测试B...</text>
      </uni-card>
    </view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      currentTab: 0 // 默认选中第一个
    };
  },
  methods: {
    switchTab(index) {
      this.currentTab = index;
    }
  }
};
</script>

截图如下:

uni-segmented-control 提供顶部 tab,点击时 @clickItem 触发 switchTab 进行切换

仅 currentTab === 0 时展示

适用于无需固定底部导航栏的场景,如数据筛选切换

3. uni-nav-bar

顶部导航,在标题栏左右提供不同的 Tab 切换按钮

<template>
  <view>
    <!-- 自定义顶部 Tab -->
    <uni-nav-bar >
      <template v-slot:left>
        <view @click="switchTab(0)" :class="{ active: currentTab === 0 }">测试A</view>
      </template>
      <template v-slot:right>
        <view @click="switchTab(1)" :class="{ active: currentTab === 1 }">测试B</view>
      </template>
    </uni-nav-bar>

    <!-- 页面内容 -->
    <view v-if="currentTab === 0">
      <uni-card title="测试A">
        <text>这里是测试A...</text>
      </uni-card>
    </view>

    <view v-else>
      <uni-card title="测试B">
        <text>这里是测试B...</text>
      </uni-card>
    </view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      currentTab: 0
    };
  },
  methods: {
    switchTab(index) {
      this.currentTab = index;
    }
  }
};
</script>

<style scoped>
.active {
  font-weight: bold;
  color: #007AFF;
}
</style>

uni-nav-bar 作为导航栏,在左右 slot 里添加点击切换的按钮。

switchTab 控制当前显示的内容

以上就是基于Vue3+UniApp在单个页面实现固定TabBar的多种方式的详细内容,更多关于Vue3 UniApp固定TabBar的资料请关注脚本之家其它相关文章!

相关文章

  • 关于VanCascader默认值(地址code转换)

    关于VanCascader默认值(地址code转换)

    这篇文章主要介绍了关于VanCascader默认值(地址code转换),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • Vue父子组件双向绑定传值的实现方法

    Vue父子组件双向绑定传值的实现方法

    父子组件之间的双向绑定非常简单,但是很多人因为是从Vue 2+开始使用的,可能不知道如何双向绑定,接下来通过本文给大家介绍Vue父子组件双向绑定传值的实现方法,需要的朋友可以参考下
    2018-07-07
  • Vue中key的作用及原理详解

    Vue中key的作用及原理详解

    本文主要介绍了Vue3中key的作用和工作原理,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • 解决vue+router路由跳转不起作用的一项原因

    解决vue+router路由跳转不起作用的一项原因

    这篇文章主要介绍了解决vue+router路由跳转不起作用的一项原因,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • vue测试环境打包与生产环境打包文件数量不一致解决方案

    vue测试环境打包与生产环境打包文件数量不一致解决方案

    这篇文章主要为大家介绍了vue测试环境打包与生产环境打包文件数量不一致的解决方案,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • vue中post请求报400的解决方案

    vue中post请求报400的解决方案

    这篇文章主要介绍了vue中post请求报400的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • vue整合百度地图显示指定地点信息

    vue整合百度地图显示指定地点信息

    本文主要介绍了vue整合百度地图显示指定地点信息,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • Vue+Element-ui表单resetFields无法重置问题

    Vue+Element-ui表单resetFields无法重置问题

    本文主要介绍了Vue+Element-ui表单resetFields无法重置问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • vue2+springsecurity权限系统的实现

    vue2+springsecurity权限系统的实现

    本文主要介绍了vue2+springsecurity权限系统的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • Vue 3.0 前瞻Vue Function API新特性体验

    Vue 3.0 前瞻Vue Function API新特性体验

    这篇文章主要介绍了Vue 3.0 前瞻Vue Function API新特性体验,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08

最新评论