当前位置:   article > 正文

uni-app 简单版自定义tabbar_uniapp 自定义tabar样式

uniapp 自定义tabar样式

最近在用uni-app,因为功能需要只能采用自定义tabbar,插件市场找了很多都不符合自己的要求,只能自己简单开发一版了

编写组件

在components文件夹下新增tabbar.vue

  1. <template>
  2. <view>
  3. <view class="tabbar-box" style="padding-bottom: constant(safe-area-inset-bottom);padding-bottom: env(safe-area-inset-bottom);">
  4. <view class="tabbar-list-box" v-for="(item,index) in list" :key="index" @click="SwitchTab(item)">
  5. <image :src="item.id==state?item.selectedIconPath:item.iconPath" mode="heightFix" class="img-icon"></image>
  6. <view class="tabbar-text" :style="{color:item.id==state?'#EE9D23':'#afafaf'}">{{item.name}}</view>
  7. </view>
  8. </view>
  9. </view>
  10. </template>
  11. <script>
  12. export default {
  13. name:"tabbar",
  14. props:{
  15. state: ''
  16. },
  17. data() {
  18. return {
  19. list:[
  20. {id:'1',name:'矿机',iconPath:'/static/images/mill-icon.png',selectedIconPath:'/static/images/mill-check-icon.png',pagePath:'/pages/mill/mill'},
  21. {id:'2',name:'钱包',iconPath:'/static/images/wallet-icon.png',selectedIconPath:'/static/images/wallet-check-icon.png',pagePath:'/pages/wallet/wallet'},
  22. {id:'3',name:'我的',iconPath:'/static/images/my-icon.png',selectedIconPath:'/static/images/my-check-icon.png',pagePath:'/pages/my/my'},
  23. ]
  24. };
  25. },
  26. onLoad() {
  27. },
  28. methods:{
  29. SwitchTab(item){
  30. console.log(item)
  31. uni.switchTab({
  32. url: item.pagePath
  33. });
  34. }
  35. }
  36. }
  37. </script>

list为tabbar的数组,name为tabbar标题,iconPath是未选中时的icon,selectedIconPath时选中tabbar时的icon,pagePath为跳转路径。当state对应数组id时为选中状态。

导入组件

pages目录下的页面级组件使用自定义组件

  1. <script>
  2. import tabbar from '../../components/tabbar/tabbar.vue'
  3. export default {
  4. components: {
  5. tabbar,
  6. },
  7. data() {
  8. return {
  9. state:'1', // tabbar标识
  10. }
  11. },
  12. onLoad(){
  13. uni.hideTabBar()
  14. }
  15. }
  16. </script>

在页面级组件上需要规定state标识,否则tabbar组件会报错,在页面加载时需要隐藏原生tabbar,不隐藏的话会出现两个tabbar,一个为原生,一个为自定义,之所以原生还保留,主要是想要用tabbar跳转方式,用其他方式跳转不是特别好。

page.json定义tabBar设置

  1. "tabBar": {
  2. // "custom": true,
  3. "color": "#afafaf",
  4. "selectedColor": "#EE9D23",
  5. "borderStyle": "white",
  6. "backgroundColor": "#F7F7F7",
  7. // "iconWidth": "48rpx",
  8. // "height":"98rpx",
  9. // "fontSize":"24rpx",
  10. "list": [
  11. {
  12. "pagePath": "pages/mill/mill",
  13. "iconPath": "/static/images/mill-icon.png",
  14. "selectedIconPath": "/static/images/mill-check-icon.png",
  15. "text": "矿机"
  16. },
  17. {
  18. "pagePath": "pages/wallet/wallet",
  19. "iconPath": "/static/images/wallet-icon.png",
  20. "selectedIconPath": "/static/images/wallet-check-icon.png",
  21. "text": "钱包"
  22. },
  23. {
  24. "pagePath": "pages/my/my",
  25. "iconPath": "/static/images/my-icon.png",
  26. "selectedIconPath": "/static/images/my-check-icon.png",
  27. "text": "我的"
  28. }
  29. ]
  30. },

使用组件

  1. <template>
  2. <tabbar :state="state"></tabbar>
  3. </template>

这只针对于app端的自定义,小程序的自定义可以在page.json的tabbar加上"custom": true, 并在页面级加载时不用隐藏tabbar即可使用。

因为项目赶着上线所以tabbar会有点粗糙,但基本够用,唯一不够好的就是在页面加载时会出现一点img图片加载事件,后期有空了会尝试复杂一点的写法,尽量完善。

最后效果图

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

闽ICP备14008679号