uniapp小程序自定义tabBar,根据身份切换自定义tabBar

1. 对于导航页自定义tabBar,仍需要在pages.json中配置tabBar

"tabBar": {
    // 此设置方法小程序真机无效,应在app中隐藏原生tab
    // "custom": true,
    // "selectedColor": "#2196F3",
    "list": [{
      "pagePath": "pages/home/home",
      "text": "首页",
      "iconPath": "static/tab/home.png",
      "selectedIconPath": "static/tab/home-active.png"
    }, {
      "pagePath": "pages/notice/notice",
      "text": "公告",
      "iconPath": "static/tab/notice.png",
      "selectedIconPath": "static/tab/notice-active.png"
    }, {
      "pagePath": "pages/my/my",
      "text": "我的",
      "iconPath": "static/tab/my.png",
      "selectedIconPath": "static/tab/my-active.png"
    }]
  },

2. 在App.vue中的onShow生命周期中隐藏原生tabBar

onShow: function() {
      // 隐藏原生tabbar
      uni.hideTabBar({
        animation: false
      })
      console.log('App Show')
    },

但发现切换的时候有时还是会出现原生tabBar,于是在每一个导航页onShow生命周期中加上uni.hideTabBar({animation: false})来解决此问题

3. 在components下新建自定义组件文件,因为我是根据身份需要展示不同的tabBar,需建两个,这边仅展示一个为例

效果如下

 

<template>
  <view class="tabbar">
    <view class="tab" v-for="(item,index) in tabbarList" :key="index" @click="navigatorTo(item.url)">
      <!-- 判断是否有点击,如果没有就不是激活样式,点击就是激活的样式 -->
      <image class="imgsize" v-if="item.type == 0" :src="current == index ? item.selectIcon : item.icon"
        mode="widthFix"></image>
      <view :class="current == index ?'active':'text'">{{item.name}}</view>
    </view>

  </view>
</template>

<script>
  export default {
    name: "tabbar",
    props: {
      current: {
        type: Number,
        default: 0, //默认第一个页面tabbar激活
      },
    },

    data() {
      return {
        tabbarList: [{
          type: 0,
          icon: '/static/tab/home.png',
          selectIcon: '/static/tab/home-active.png',
          name: '首页',
          url: '/pages/home/home',
        }, {
          type: 0,
          icon: '/static/tab/notice.png',
          selectIcon: '/static/tab/notice-active.png',
          name: '公告',
          url: '/pages/notice/notice',
        }, {
          type: 0,
          icon: '/static/tab/my.png',
          selectIcon: '/static/tab/my-active.png',
          name: '我的',
          url: '/pages/my/my',
        }]
      };
    },
    methods: {
      navigatorTo(e) {
        uni.switchTab({
          url: e,
        })
      },
    },
  }
</script>

<style lang="scss" scoped>
  .tabbar {
    position: fixed;
    bottom: 0;
    padding-bottom: constant(safe-area-inset-bottom);
    /* 兼容 iOS<11.2 */
    padding-bottom: env(safe-area-inset-bottom);
    /* 兼容iOS>= 11.2 */
    background-color: #FFFFFF;
    width: 100%;
    z-index: 1;
    box-sizing: border-box;
    box-shadow: 0rpx 0rpx 12rpx 2rpx rgba(0, 0, 0, 0.1);
    border-radius: 30rpx 30rpx 0rpx 0rpx;
    padding-top: 12rpx;
    display: flex;
    justify-content: space-around;
    align-items: center;

    .tab {
      display: flex;
      flex-direction: column;
      align-items: center;
    }

    .imgsize {
      width: 56rpx;
      height: 56rpx;
    }

    .text {
      margin-top: 4rpx;
      padding-bottom: 12rpx;
      font-size: 20rpx;
      color: #333333;
      line-height: 20rpx;
    }

    .active {
      margin-top: 4rpx;
      padding-bottom: 12rpx;
      font-size: 20rpx;
      color: #2196F3;
      line-height: 20rpx;
    }
  }
</style>

4. 导航页中使用

<template>
  <view>
    <!-- 根据身份展示不同的tabBar -->
    <userbar :current="current" v-if="role===1"></userbar>
    <tabbar :current="current" v-if="role===2"></tabbar>
    </view>
</template>
<script>
  export default {
    data(){
       return {
         current:0,  // 公告页面和我的页面根据需要传入对应的索引号
      }
    },
    onShow(){
      uni.hideTabBar({
        animation: false
      })
      this.current = 0   // 公告页面和我的页面根据需要传入对应的索引号
   }
}
</script>

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
### 回答1: Uniapp小程序可以通过自定义tabbar来实现更加个性化的界面设计。具体步骤如下: 1. 在pages目录下创建一个名为tabbar的文件夹,用于存放自定义tabbar的相关页面和组件。 2. 在tabbar文件夹下创建一个名为index.vue的文件,作为自定义tabbar的主页面。 3. 在index.vue中编写自定义tabbar的布局和样式,可以使用uni-ui组件库中的tabbar组件或自己编写。 4. 在App.vue中引入自定义tabbar的主页面,并将其作为底部tabbar的选项之一。 5. 在底部tabbar的每个选项中,通过跳转到对应的页面来实现页面之间的切换。 需要注意的是,自定义tabbar的实现需要对Uniapp框架有一定的了解和掌握,建议先学习Uniapp的基础知识再进行尝试。 ### 回答2: uniapp是一款基于Vue框架和小程序开发的跨平台开发工具,可以同时开发多端应用,包括微信小程序、支付宝小程序、H5等。其中uniapp小程序是目前市面上使用的最多的一种小程序类型。 tabbar小程序中常用的底部导航栏,用于快速切换小程序内的不同页面。默认情况下,uniapp小程序提供了一种标准的tabbar样式,开发者只需要在pages.json文件中配置相应的页面路径和图标即可使用。 但是,有时候我们需要自定义tabbar的样式来满足不同的需求。在uniapp小程序中,自定义tabbar的方式如下: 1. 创建一个自定义tabbar组件 可以选择在pages目录下创建一个新的目录来存放tabbar相关的文件,例如创建一个名为tabbar的目录,然后在该目录下创建一个名为tabbar.vue的组件文件。在该组件文件中可以使用自定义的html结构和CSS样式,以及通过事件绑定来实现底部导航栏的切换。 2. 在pages.json中注册自定义tabbar组件 在pages.json文件中的“tabBar”字段下添加以下内容: "custom": { "text": "自定义", "iconPath": "/static/custom.png", "selectedIconPath": "/static/custom-selected.png", "pagePath": "/pages/tabbar/tabbar" } 其中,“custom”表示自定义tabbar的名称,“text”表示tabbar的文字描述,“iconPath”表示tabbar未选中时的图标路径,“selectedIconPath”表示tabbar选中时的图标路径,“pagePath”表示自定义tabbar组件的页面路径。 3. 创建底部导航栏切换事件 在自定义tabbar组件中,可以通过事件绑定来实现底部导航栏的切换。例如: <template> <view class="tabbar"> <view class="tabbar-item" @click="navigateTo('/pages/home/home')"> <image class="tabbar-icon" src="/static/home.png"></image> <text class="tabbar-text">首页</text> </view> <view class="tabbar-item" @click="navigateTo('/pages/cart/cart')"> <image class="tabbar-icon" src="/static/cart.png"></image> <text class="tabbar-text">购物车</text> </view> <view class="tabbar-item" @click="navigateTo('/pages/profile/profile')"> <image class="tabbar-icon" src="/static/profile.png"></image> <text class="tabbar-text">我的</text> </view> </view> </template> <script> export default { methods: { navigateTo(url) { uni.switchTab({ url: url }) } } }; </script> 在上面的代码中,通过uni.switchTab方法来实现底部导航栏的切换,具体实现步骤如下: 1) 在组件的methods中定义一个名为navigateTo的方法,该方法接收一个参数url,用于指定需要切换到的页面路径; 2) 在组件的模板代码中,定义选项卡的图标和文本,并绑定点击事件到navigateTo方法上。 4. 更新App.vue文件 最后,需要在App.vue文件中添加以下代码: <template> <div> <custom-tabbar></custom-tabbar> <router-view></router-view> </div> </template> 其中,“custom-tabbar”为自定义tabbar组件的名称。 通过以上步骤,就可以实现uniapp小程序的自定义tabbar了。由于uniapp支持多端开发,所以可以多端同时使用相同的自定义tabbar。同时,自定义tabbar也可以应用于不同的小程序类型,并支持自定义样式和事件处理逻辑。 ### 回答3: Uniapp是一种基于Vue.js的跨平台开发框架,支持多种端的开发,其中包括小程序端。Uniapp小程序的自定义tabbar是指在原有的底部导航栏的基础上,增加了一些自定义的功能和界面,可以更好地满足用户的需求和开发者的需求。 Uniapp小程序的自定义tabbar分为两种方式:一种是通过H5+CSS3实现,另一种方式是通过组件实现。具体来说,第一种方式需要开发者手动编写HTML、CSS和JavaScript代码,通过计算样式和位置来实现自定义tabbar的效果,但相对来说比较麻烦。第二种方式则是通过封装好的组件来实现自定义tabbar的效果,可以快速、简便地实现。 对于第一种方式,我们的步骤如下: 1.将页面的导航栏注释掉,将整个页面的高度设为100%,再给底部设置一个高度(如80px),使得页面的内容可以垂直居中。 2.在页面底部添加一个原生的footer标签,并在其中添加自己想要的tabbar功能和样式。 3.通过CSS3的transition和transform属性设置动画效果,使得tabbar切换时能够有更加自然的过渡效果。 对于第二种方式,通过uni-ui组件库中的TabBar组件,你可以轻松实现自定义tabbar效果,并且可以进行更加灵活的自定义配置,如图标、颜色、文字等。 总的来说,无论是第一种方式还是第二种方式,Uniapp小程序的自定义tabbar都能够为用户提供更加优质的界面和交互体验,同时也能够提高开发者的开发效率和开发质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值