当前位置:   article > 正文

uni-app 实现凸起的 tabbar 底部导航栏_uniapp 底部tanba凸起

uniapp 底部tanba凸起

效果图

在 pages.json 中设置隐藏自带的 tabbar 导航栏

"custom": true, // 开启自定义tabBar(不填每次原来的tabbar在重新加载时都回闪现)

新建一个 custom-tabbar.vue 自定义组件页面

custom-tabbar.vue
  1. <!-- 自定义底部导航栏 -->
  2. <template>
  3. <view class="container">
  4. <view
  5. class="tabbar-item"
  6. :class="[item.centerItem ? ' center-item' : '']"
  7. :style="'width: calc(100% /' + tabbarList.length + ')'"
  8. @click="changeItem(item)"
  9. v-for="(item, i) in tabbarList"
  10. :key="i"
  11. >
  12. <view class="item-top"><image :src="curItem === item.id ? item.selectedIconPath : item.iconPath" /></view>
  13. <view class="item-bottom" :class="[curItem === item.id ? 'item-active' : '']">{{ item.text }}</view>
  14. </view>
  15. </view>
  16. </template>
  17. <script>
  18. export default {
  19. props: {
  20. /* 当前导航栏 */
  21. currPage: {
  22. type: Number,
  23. default: 0
  24. }
  25. },
  26. data() {
  27. return {
  28. curItem: 0, // 当前所选导航栏
  29. tabbarList: [
  30. {
  31. id: 0,
  32. pagePath: "/pages/public/index",
  33. iconPath: "/static/tab-bar/home.png",
  34. selectedIconPath: "/static/tab-bar/home-active.png",
  35. text: "首页",
  36. centerItem: false
  37. },
  38. {
  39. id: 1,
  40. pagePath: "",
  41. iconPath: "/static/tab-bar/bulge-active.png",
  42. selectedIconPath: "/static/tab-bar/bulge-active.png",
  43. text: "称重",
  44. centerItem: true
  45. },
  46. {
  47. id: 2,
  48. pagePath: "/pages/weight/my",
  49. iconPath: "/static/tab-bar/my.png",
  50. selectedIconPath: "/static/tab-bar/my-active.png",
  51. text: "我的",
  52. centerItem: false
  53. }
  54. ] // 导航栏列表
  55. };
  56. },
  57. mounted() {
  58. this.curItem = this.currPage; // 当前所选导航栏
  59. // #ifdef H5
  60. uni.hideTabBar(); // 隐藏 tabBar 导航栏
  61. // #endif
  62. },
  63. methods: {
  64. /* 导航栏切换 */
  65. changeItem(e) {
  66. // 中间凸起按钮
  67. if (e.id === 1) {
  68. // todo
  69. return;
  70. }
  71. uni.switchTab({ url: e.pagePath }); // 跳转到其他 tab 页面
  72. }
  73. }
  74. };
  75. </script>
  76. <style lang="scss" scoped>
  77. $textDefaultColor: #999; // 文字默认颜色
  78. $bottomBg: #fff; // 底部背景
  79. $textSelectedColor: #67c23a; // 文字选中颜色
  80. $centerItemBg: #fff; // 中间凸起按钮背景
  81. .container {
  82. position: fixed;
  83. bottom: 0;
  84. left: 0;
  85. display: flex;
  86. align-items: center;
  87. width: 100%;
  88. height: 110rpx;
  89. color: $textDefaultColor;
  90. padding: 5rpx 0;
  91. background-color: $bottomBg;
  92. box-shadow: 0 0 10rpx #999;
  93. }
  94. .tabbar-item {
  95. display: flex;
  96. flex-direction: column;
  97. justify-content: center;
  98. align-items: center;
  99. text-align: center;
  100. height: 100rpx;
  101. .item-top {
  102. flex-shrink: 0;
  103. width: 65rpx;
  104. height: 65rpx;
  105. padding: 4rpx;
  106. image {
  107. width: 100%;
  108. height: 100%;
  109. }
  110. }
  111. .item-bottom {
  112. width: 100%;
  113. font-size: 28rpx;
  114. }
  115. .item-active {
  116. color: $textSelectedColor;
  117. }
  118. }
  119. .center-item {
  120. position: relative;
  121. .item-top {
  122. position: absolute;
  123. top: -55rpx;
  124. left: 50%;
  125. transform: translateX(-50%);
  126. width: 105rpx;
  127. height: 105rpx;
  128. background-color: $centerItemBg;
  129. border-radius: 50%;
  130. }
  131. .item-bottom {
  132. position: absolute;
  133. bottom: 5rpx;
  134. }
  135. }
  136. </style>

底部安全区域的适配问题可查看:uni-app 苹果手机底部安全区域的适配问题

在 main.js 中引用组件

  1. // 注册全局组件
  2. import customTabbar from "components/custom-tabbar.vue"
  3. Vue.component('custom-tabbar', customTabbar)

在要用到的页面中直接调用

  1. <!-- 自定义 tabbar 底部导航栏 -->
  2. <custom-tabbar :curr-page="0" />
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/970760
推荐阅读
相关标签
  

闽ICP备14008679号