当前位置:   article > 正文

只需3步,uniapp自定义微信小程序tabbar_uniapp小程序自定义tabbar

uniapp小程序自定义tabbar

原生tabBar是相对固定的配置方式,可能无法满足所有场景,这就涉及到自定义tabBar。

但注意除了H5端,自定义tabBar的性能体验会低于原生tabBar。App和小程序端非必要不要自定义

没办法为了美,为了diy

实现方式

1.在components目录下新建my-tabbar组件

2.my-tabbar.vue 文件内容如下

  1. <template>
  2. <view class="tabBar">
  3. <view
  4. v-for="(item,index) in tabBar"
  5. :key="item.url"
  6. class="tabbar_item"
  7. :class="{'active':item.url == currentPage}"
  8. @click="navTo(item)"
  9. >
  10. <image v-if="item.url == currentPage" :src="item.imgClick" mode=""></image>
  11. <image v-else :src="item.imgNormal" mode=""></image>
  12. <view class="text">{{item.text}}</view>
  13. </view>
  14. </view>
  15. </template>
  16. <script>
  17. export default {
  18. props:{
  19. currentPage:{
  20. type:String,
  21. default:'index'
  22. }
  23. },
  24. data() {
  25. return {
  26. tabBar:[{
  27. url:'tabBar1',
  28. text:'首页',
  29. imgNormal:'../../static/tabbar/home.png',
  30. imgClick:'../../static/tabbar/s_home.png'
  31. },
  32. {
  33. url:'tabBar2',
  34. text:'分类',
  35. imgNormal:'../../static/tabbar/box.png',
  36. imgClick:'../../static/tabbar/s_box.png'
  37. },
  38. {
  39. url:'tabBar3',
  40. text:'我的',
  41. imgNormal:'../../static/tabbar/user.png',
  42. imgClick:'../../static/tabbar/s_user.png'
  43. }]
  44. };
  45. },
  46. created() {
  47. uni.hideTabBar({})
  48. },
  49. computed:{
  50. },
  51. methods:{
  52. navTo(item){
  53. if(item.url !== this.currentPage){
  54. var isUrl = `/pages/${item.url}/${item.url}`
  55. const that = this
  56. uni.switchTab({
  57. url: isUrl
  58. })
  59. } else{
  60. this.$parent.toTop()
  61. }
  62. }
  63. }
  64. }
  65. </script>
  66. <style lang="scss" scoped>
  67. //导航栏设置
  68. $isRadius:20upx; //左上右上圆角
  69. $isWidth:85vw; //导航栏宽度
  70. $isBorder:0px solid white; //边框 不需要则设为0px
  71. $isBg:white; //背景
  72. // 选中设置
  73. $chooseTextColor:#000; //选中时字体颜色
  74. $chooseBgColor:transparent; //选中时背景颜色 transparent为透明
  75. //未选中设置
  76. $normalTextColor:#999; //未选中颜色
  77. .tabBar{
  78. width: $isWidth;
  79. height: 100upx;
  80. position: fixed;
  81. bottom: 106rpx;
  82. left: 0;
  83. right: 0;
  84. box-shadow: 0upx 2upx 10upx rgba(89,125,172,.4);
  85. margin:0 auto;
  86. z-index: 998;
  87. background-color: $isBg;
  88. color: $normalTextColor;
  89. border-left: $isBorder;
  90. border-top: $isBorder;
  91. border-right: $isBorder;
  92. display: flex;
  93. justify-content: space-around;
  94. border-radius: 80rpx;
  95. box-sizing: border-box;
  96. overflow: hidden;
  97. .tabbar_item{
  98. width: 25%;
  99. font-size: 12px;
  100. display: flex;
  101. flex-direction: column;
  102. justify-content: center;
  103. align-items: center;
  104. &.active{
  105. border-left: $isBorder;
  106. border-top: $isBorder;
  107. background: $chooseBgColor;
  108. color: $chooseTextColor;
  109. }
  110. }
  111. image{
  112. width: 48upx;
  113. height:48upx;
  114. }
  115. }
  116. </style>

注意的是page.json也有添加tabBar选项,在组件里面隐藏系统内置的tabBar

3.在需要的页面引用my-tabbar组件

  1. <template>
  2. <view class="container">
  3. <my-tabbar :currentPage="currentPage"></my-tabbar>
  4. </view>
  5. </template>
  6. <script>
  7. export default {
  8. data() {
  9. return {
  10. currentPage: 'tabBar1'
  11. }
  12. },
  13. onLoad() {
  14. },
  15. methods: {
  16. }
  17. }
  18. </script>
  19. <style>
  20. </style>

4.编译运行效果

优缺点

优点就是自定义可以非常的强,缺点是首次点击会闪一下,性能会比原生差。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/103132?site
推荐阅读
相关标签
  

闽ICP备14008679号