当前位置:   article > 正文

【uni-app】创建底部或者顶部导航栏_uniapp底部导航栏

uniapp底部导航栏

目录

1、创建底部导航栏

2、自定义顶部导航栏组件

第一个图的代码 

第二个图的代码


1、创建底部导航栏

(1)新建导航页面

在 pages 中新建tabBar目录,在目录下创建choose和me目录。然后在pages.json的pages中,生成新页面的默认配置代码。(不一定非要创建在一个目录下,可以独立成一个文件)

(2)配置底部导航栏结构

在 pages.json 中,配置 tabBar 注意:pages 的第一个 path 必须与 tabBar 的第一个 pagePath 相同否则不显示底部导航

  1. "pages": [{
  2. "path": "pages/tabBar/choose/index",
  3. "style": {
  4. "navigationBarTitleText": "行情",
  5. "navigationStyle": "custom",
  6. "navigationBarTextStyle": "white"
  7. }
  8. },
  9. {
  10. "path": "pages/tabBar/me/index",
  11. "style": {
  12. "navigationBarTitleText": "量化平台",
  13. "navigationStyle": "custom",
  14. "navigationBarTextStyle": "white"
  15. }
  16. }
  17. ],
  18. "tabBar": {
  19. "color": "#d4dbe3",
  20. "selectedColor": "#000000",
  21. "borderStyle": "black",
  22. "backgroundColor": "#ffffff",
  23. "list": [{
  24. "pagePath": "pages/tabBar/choose/index",
  25. "iconPath": "static/hqicon2.png",
  26. "selectedIconPath": "static/hqicon1.png",
  27. "text": "自选"
  28. },
  29. {
  30. "pagePath": "pages/tabBar/me/index",
  31. "iconPath": "static/gerenicon2.png",
  32. "selectedIconPath": "static/gerenicon1.png",
  33. "text": "我的"
  34. }
  35. ]
  36. },

2、自定义顶部导航栏组件

第一个图的代码 

顶部添加的内容:VIP图标、标题、背景图片

(1)在components中创建nabbar组件

  1. <template>
  2. <view class="nabbar" :style="{'height': statusBarHeight + barHeight + 'px'}">
  3. <img src="../static/hangqingdbj.png" class="nabbar">
  4. <!-- //手机状态栏 -->
  5. <view class="status-bar" :style="{'height': statusBarHeight + 'px'}"></view>
  6. <!-- //导航栏 -->
  7. <view class="nabbar-box" :style="{ 'top': statusBarHeight+ 'px', 'heigth': barHeight + 'px' }">
  8. <view class="nabbar-cont" :style="{ width: barWidth +'px' }">
  9. <slot></slot>
  10. </view>
  11. </view>
  12. </view>
  13. </template>
  14. <script>
  15. export default {
  16. name: "Nabbar",
  17. data() {
  18. return {
  19. statusBarHeight: 20,
  20. barHeight: 44,
  21. barWidth: null,
  22. };
  23. },
  24. mounted() {
  25. let that = this;
  26. //通过uni自带api获取手机系统信息
  27. uni.getSystemInfo({
  28. success: function(res) {
  29. // console.log(res)
  30. that.statusBarHeight = res.statusBarHeight; //手机状态栏高度
  31. let isiOS = res.system.indexOf('iOS') > -1; //是否为iOS系统
  32. that.barHeight = !isiOS ? 48 : 44; //导航栏高度,iOS:48,Android:44
  33. that.barWidth = res.windowWidth - 87; //nabbar可操作宽度 = 屏幕宽度 - 小程序右上角的胶囊宽度(87)
  34. }
  35. })
  36. },
  37. }
  38. </script>
  39. <style lang="scss">
  40. .nabbar {
  41. width: 100%;
  42. overflow: hidden;
  43. }
  44. .status-bar {
  45. position: fixed;
  46. top: 0;
  47. left: 0;
  48. right: 0;
  49. width: 100%;
  50. // background-color: #FFFFFF;
  51. // height: var(--status-bar-height);
  52. z-index: 999;
  53. // background-color: #000000;
  54. }
  55. .nabbar-box {
  56. position: fixed;
  57. top: 0;
  58. left: 0;
  59. right: 0;
  60. width: 100%;
  61. height: 88rpx;
  62. // background-color: #000000;
  63. padding: 0 16rpx;
  64. z-index: 999;
  65. .nabbar-cont {
  66. height: 100%;
  67. display: flex;
  68. align-items: center;
  69. }
  70. }
  71. </style>

(2)在所需页面引用

  1. <template>
  2. <view class="container">
  3. <view-nabbar>
  4. <slot-one>
  5. <view style="width: 100%;display: flex;flex-direction: row;align-items: center;">
  6. <view @click="vip" style="display: flex;align-items: center;">
  7. <image src="../../../static/vipicon.png" style="width: 70rpx;height: 35rpx;"></image>
  8. </view>
  9. <view style="margin-left: 250rpx;color: white;font-weight: bolder;">行情</view>
  10. </view>
  11. </slot-one>
  12. </view-nabbar>
  13. </view>
  14. </template>
  15. <script>
  16. import Nabbar from '@/components/nabbar.vue';
  17. export default {
  18. components: {
  19. 'view-nabbar': Nabbar,
  20. },
  21. data() {
  22. return {
  23. windowHeight: 0,
  24. barHeight: 44,
  25. number: '',
  26. id: '',
  27. placeholder1: "color:#8f8faf",
  28. placeholder: "color:white",
  29. }
  30. },
  31. onLoad() {
  32. uni.getSystemInfo({ //获取系统信息
  33. success: (res) => {
  34. // console.log(res.statusBarHeight)
  35. let isiOS = res.system.indexOf('iOS') > -1; //是否为iOS系统
  36. this.barHeight = !isiOS ? 48 : 44; //导航栏高度,iOS:48,Android:44
  37. this.windowHeight = res.statusBarHeight + this.barHeight
  38. }
  39. });
  40. },
  41. }
  42. </script>

第二个图的代码

(1)在components中创建navbar组件

  1. <template>
  2. <view class="prohibition">
  3. <view class="demo" :style="[{background},{color},{height},{paddingTop}]">
  4. <!-- 左侧返回按钮 -->
  5. <view class="left" @click="onBack" v-if="back" :style="[{color},{paddingTop}]">
  6. <uni-icons type="arrowleft" size="30" :color='color'></uni-icons>
  7. </view>
  8. <!-- 中间标题文字 -->
  9. <view class="title">
  10. {{title}}
  11. </view>
  12. </view>
  13. </view>
  14. </template>
  15. <script>
  16. export default {
  17. data() {
  18. return {
  19. height: 0,
  20. paddingTop: 0,
  21. }
  22. },
  23. props: {
  24. title: { // 标题文字(默认为空)
  25. type: String,
  26. default: ''
  27. },
  28. color: { // 标题和返回按钮颜色(默认白色)
  29. type: String,
  30. default: '#fff'
  31. },
  32. //建议使用background 因为使用backgroundColor,会导致不识别渐变颜色
  33. background: { // 背景颜色(不传值默认透明)
  34. type: String,
  35. default: 'transparent'
  36. },
  37. back: { // 是否显示返回按钮(不传值默认不显示)
  38. type: Boolean,
  39. default: false
  40. },
  41. },
  42. created() {
  43. const demo = uni.getMenuButtonBoundingClientRect()
  44. this.height = demo.height + "px"
  45. this.paddingTop = demo.top + "px"
  46. },
  47. methods: {
  48. // 左侧返回按钮调用
  49. onBack() {
  50. this.$emit("onBack")
  51. }
  52. }
  53. }
  54. </script>
  55. <style lang="less">
  56. .demo {
  57. position: relative; //注意,建议使用相对定位,因为固定定位会脱离文档流,然后你还要去设置marginTop值
  58. // position: fixed;
  59. width: 100%;
  60. display: flex;
  61. align-items: center;
  62. justify-content: center;
  63. font-size: 26rpx;
  64. z-index: 100;
  65. padding-bottom: 10rpx;
  66. .left {
  67. float: left;
  68. position: absolute;
  69. width: 100rpx;
  70. height: 50rpx;
  71. top: 0;
  72. bottom: 0;
  73. left: 20rpx;
  74. color: #fff;
  75. margin: auto;
  76. }
  77. .title {
  78. font-size: 36rpx;
  79. font-family: Source Han Sans CN;
  80. }
  81. }
  82. </style>

(2)在页面使用

  1. <template>
  2. <view class="container">
  3. <navbar class="header" :background="backgroundColor" back :title="title" @onBack="goBack"></navbar>
  4. </view>
  5. </template>
  6. <script>
  7. import navbar from '../../components/Navbar/index.vue'
  8. export default {
  9. components: {
  10. navbar
  11. },
  12. data() {
  13. return {
  14. backgroundColor: '#60d2e1',
  15. title: 'wo',
  16. };
  17. },
  18. methods: {
  19. goBack(){}
  20. }
  21. }
  22. </script>
  23. <style lang="scss">
  24. page {
  25. background-color: #FFFFFF;
  26. }
  27. </style>

(3)修改pages.json

如果是全局设置,那就在globalStyle中设置

  1. "globalStyle": {
  2. "navigationBarTextStyle": "black",
  3. "navigationBarTitleText": "uni-app",
  4. "navigationBarBackgroundColor": "#F8F8F8",
  5. "backgroundColor": "#F8F8F8",
  6. "navigationStyle": "custom" //设置自定义导航栏
  7. }

如果是单页面则是在对应页面中使用

  1. "pages": [{
  2. "path": "pages/index/index",
  3. "style": {
  4. "navigationBarTitleText": "首页",
  5. "enablePullDownRefresh": false,
  6. "navigationStyle": "custom" //设置自定义导航栏
  7. }
  8. }]

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

闽ICP备14008679号