当前位置:   article > 正文

uniapp 动态 tabbar_uniapp动态底部tabbar

uniapp动态底部tabbar

最近在开发 H5 项目时被动态 tabbar 困扰了许久,在网上搜的内容也大抵用不上,恍然大悟之后才有了下面的思路

动态 tabbar 主要是作用在需要针对不同的用户类型显示不同的内容,下面是代码实现:

首先要将所有用到的 tabbar 路径写进 pages.json 里

  1. "tabBar": {
  2. "list": [{
  3. "pagePath": " "
  4. },
  5. {
  6. "pagePath": " "
  7. },
  8. {
  9. "pagePath": " "
  10. },
  11. {
  12. "pagePath": " "
  13. },
  14. {
  15. "pagePath": " "
  16. },
  17. {
  18. "pagePath": " "
  19. },
  20. {
  21. "pagePath": " "
  22. },
  23. {
  24. "pagePath": " "
  25. }
  26. ]
  27. },

 其次创建一个 js 文件,将动态 tabbar 的配置信息写入

  1. // 个人数据
  2. export const xxx = [{
  3. "pagePath": ' ',
  4. "text": ' ',
  5. "iconPath": ' ',
  6. "selectedIconPath": ' '
  7. },
  8. {
  9. "pagePath": ' ',
  10. "text": ' ',
  11. "iconPath": ' ',
  12. "selectedIconPath": ' ',
  13. },
  14. {
  15. "pagePath": ' ',
  16. "text": ' ',
  17. "iconPath": ' ',
  18. "selectedIconPath": ' '
  19. },
  20. {
  21. "pagePath": ' ',
  22. "text": ' ',
  23. "iconPath": ' ',
  24. "selectedIconPath": ' '
  25. },
  26. {
  27. "pagePath": ' ',
  28. "text": ' ',
  29. "iconPath": ' ',
  30. "selectedIconPath": ' '
  31. },
  32. ]
  33. // police 数据
  34. export const xxx = [{
  35. "pagePath": ' ',
  36. "text": ' ',
  37. "iconPath": ' ',
  38. "selectedIconPath": ' '
  39. },
  40. {
  41. "pagePath": ' ',
  42. "text": ' ',
  43. "iconPath": ' ',
  44. "selectedIconPath": ' '
  45. },
  46. {
  47. "pagePath": ' ',
  48. "text": ' ',
  49. "iconPath": ' ',
  50. "selectedIconPath": ' '
  51. },
  52. {
  53. "pagePath": ' ',
  54. "text": ' ',
  55. "iconPath": ' ',
  56. "selectedIconPath": ' '
  57. },
  58. ]

通过遍历的方式构建 tabbar 的 UI 结构

  1. <template>
  2. <view class="myTabbar">
  3. <view v-for="(item, index) in person"
  4. :key="index" class="tabbar"
  5. // 可以在 click 事件中执行一些选中项的样式切换以及路由跳转等功能
  6. @click="changeActive(index, item.pagePath)">
  7. <view class="item">
  8. <uni-icons v-if="active === index" custom-prefix="iconfont"
  9. :type="item.selectedIconPath" color="#fff" size="25px">
  10. </uni-icons>
  11. <uni-icons v-else custom-prefix="iconfont"
  12. :type="item.iconPath" color="#ccc" size="25px">
  13. </uni-icons>
  14. </view>
  15. <view class="text" :class="{ txt: active === index }">{{ item.text }}</view>
  16. </view>
  17. </view>
  18. </template>
  19. <script setup>
  20. JS 内容暂时不进行详解,懂得都懂
  21. { 通过 点击时的 index 为 active 选中项赋值 }
  22. </script>
  23. <style lang="scss">
  24. .myTabbar {
  25. position: fixed;
  26. bottom: 0;
  27. display: flex;
  28. justify-content: space-between;
  29. width: 100%;
  30. height: 100rpx;
  31. background-color: #005aaa;
  32. .tabbar {
  33. display: flex;
  34. flex-direction: column;
  35. justify-content: space-around;
  36. align-items: center;
  37. width: 20%;
  38. height: 100%;
  39. .item {
  40. width: 40rpx;
  41. height: 40rpx;
  42. text-align: center;
  43. margin-top: 10rpx;
  44. }
  45. .text {
  46. color: #ccc;
  47. font-size: 14px;
  48. }
  49. .txt {
  50. color: #fff;
  51. }
  52. }
  53. }
  54. </style>

最后在所有需要引入 tabbar 的页面对原本的 tabbar 进行隐藏

  1. <template>
  2. <tabbar />
  3. </template>
  4. <script setup>
  5. // 导入 tabbar
  6. import tabbar from '@/components/tabbar/tabbar .vue';
  7. import { onReady } from '@dcloudio/uni-app';
  8. // 在组件加载完成时隐藏 tabbar
  9. onReady(() => {
  10. uni.hideTabBar();
  11. });
  12. </script>
  13. <style>
  14. 固定在底部的样式已经在 tabbar 组件中写了,这里不过多赘述
  15. </style>

亲测功能可在 H5 项目中完美实现,但还有一些瑕疵,即在 tabbar 页面首次进入时会出现闪白的情况,暂时未能解决!

注:此项目 CV 即可食用!!!  (手动狗头保命。。。)

如果本帖能帮助到大家,希望大家多多点赞三连鼓励,有问题可以留在评论区,会努力帮大家实现!

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