uniapp 微信小程序自定义头部导航栏

12 篇文章 0 订阅
8 篇文章 1 订阅

隐藏原生的navigationBar

1.全局设为自定义

"globalStyle": {
		"navigationStyle": "custom",
}

2.指定页面设为自定义

{
  "pages": [{
      "path": "pages/index/index",
      "style": {
        "navigationStyle": ''custom",  //设置为自定义导航
      }
    },
    ...
  ]
}

封装自定义头部导航组件

当我们在JSON中将navigationStyle设置成custom后,当前页面的顶部导航栏就需要我们制作了,但出现了一下几个问题:

导航栏的高度该是多少?
导航栏被刘海、信号图标给覆盖了,就像下图
在这里插入图片描述
因为不同的手机型号头部导航栏高度可能不一致,所以为了适配更多型号,需要动态计算导航栏的高度。

状态栏的高度可以通过 wx.getSystemInfo() 获取。
在这里插入图片描述
胶囊按钮的信息可以通过 wx.getMenuButtonBoundingClientRect() 获取。
在这里插入图片描述
所以导航栏高度=状态栏高度+胶囊按钮的高度+(胶囊按钮距离顶部的距离-状态栏的高度)*2。

由于胶囊按钮是原生组件,为表现一致,其单位在各个系统都为 px,所以自定义导航栏高度的单位都必须是 px,才能完美适配。

实现方法

1、新建navbar组件
在这里插入图片描述
html 代码

// 设置导航栏的高度等于实际获取的导航栏高度;设置返回箭头、文字所在 view 的高度等于胶囊按钮的高度,距离顶部的距离等于胶囊按钮距离顶部的距离,然后设置返回箭头、文字垂直居中
<view class="navbar" :style="{'background':background, 'height':navbarHeight + 'px'}">
	  <view :style="{'height':capsuleHeight + 'px', 'top': capsuleTop + 'px' }" class="arrow-content">
	    <view class="arrow" v-if="isShowArrow" @click="handleGoToBack"></view>
	  </view>
	  <view class="text" :style="{ 'height': capsuleHeight + 'px', 'top': capsuleTop + 'px' }">{{title}}</view>
	</view>

css样式

.navbar{
  width: 100%;
  //设置导航栏固定在顶部
  position: fixed;
  top: 0;
  z-index: 99;
}
.arrow-content{
  position: absolute;
  left: 40rpx;
  z-index: 999;
  display: flex;
  align-items: center;
}
.arrow{
  width: 20rpx;
  height: 20rpx;
  border: 5rpx solid #FFFFFF;
  border-right-color:transparent;
  border-bottom-color:transparent;
  transform: rotate(-45deg);
}
.text{
  position: absolute;
  left: 0;
  right: 0;
  font-size: 28rpx;
  color: #FFFFFF;
  display: flex;
  align-items: center;
  justify-content: center;
}

js代码

export default {
  props: {
    title:{
      type: String,
      default: '首页'
    },
    background:{
      type: String,
      default: 'linear-gradient(to right,#FF3413,#FF924D)'
    },
    isShowArrow:{
      type: Boolean,
      default: true
    }
  },
  data:{
    capsuleTop: '', //胶囊距离屏幕顶部的距离
    capsuleHeight: '', //胶囊高度
    navbarHeight: '' //导航栏高度
  },
  onLoad(){
  	// 获取应用实例
	const App = getApp();
  	this.capsuleTop = App.globalData.capsule.top, 
    this.capsuleHeight = App.globalData.capsule.height, 
    this.navbarHeight = (App.globalData.capsule.top - App.globalData.system.statusBarHeight) * 2 + App.globalData.capsule.height + App.globalData.system.statusBarHeight, 
  },
  methods: {
    handleGoToBack(){
      uni.navigateBack({
        delta: 1
      })
    }
  }
}

app.vue代码

export default {
  globalData: {
    system: '',
    capsule: ''
  },
  onLaunch: function () {
   // 在 app.vue 中全局获取一次系统和胶囊信息
   // 获取系统信息
   uni.getSystemInfo({
    success: res => {
      this.globalData.system = res
    }
  })
  // 获取胶囊信息
  this.globalData.capsule = wx.getMenuButtonBoundingClientRect()
  }
}

在需要自定义头部的页面里直接引入组件即可使用

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Uniapp是一款多端开发框架,支持开发微信小程序、H5、App等多种平台的应用程序。在微信小程序中,往往需要自定义导航以满足用户需求,Uniapp提供了方便易用的方法来实现此功能。 首先,在Uniapp中创建一个自定义导航的组件,可以使用vue组件进行实现。在此组件中,需要定义导航的样式,例如背景颜色、文字颜色、边框等。 其次,在每个需要自定义导航的页面中引入这个组件,并将页面的标题传递给组件。这样,在页面中就可以显示出我们定义的自定义导航了。 除此之外,我们还可以在这个组件中添加返回按钮、菜单按钮等功能,以提升用户体验。同时,还可以通过uni.getSystemInfoSync()方法获取系统信息来动态设置导航的高度,以兼容不同设备的屏幕尺寸。 总之,Uniapp提供了方便简洁的方法来实现自定义导航,在微信小程序开发中非常实用。通过此功能,我们可以为用户提供更加个性化、更加舒适的应用体验。 ### 回答2: Uniapp 是一款跨平台的开发框架,可以快速开发出支持多种小程序平台的应用,包括微信小程序。在微信小程序中,自定义导航能够提供更好的用户体验,同时也满足了开发者个性化设计的需求。下面将介绍如何在 Uniapp 中自定义微信小程序导航。 1. 使用插件方式 Uniapp 提供了一个可以自定义导航的插件 uni-navigationBar,可以方便地进行开发。使用该插件的步骤如下: (1)安装 uni-navigationBar 插件 在 HBuilderX 的插件市场搜索 uni-navigationBar 并安装。或者在项目根目录下执行以下命令: npm install --save uni-navigationbar (2)在需要使用自定义导航的页面引入插件 在需要使用自定义导航的页面的 script 标签中,引入插件并注册: import uniNavigationBar from 'uni-navigationbar/vue'; Vue.use(uniNavigationBar); (3)在页面中使用自定义导航 可以在页面的 template 标签中,使用 uni-navigationBar 提供的组件和组件属性来实现自定义导航。 2. 使用自定义组件方式 如果不想使用插件,也可以自己编写一个自定义组件来实现自定义导航。实现的步骤如下: (1)在项目中创建自定义组件 可以使用 HBuilderX 的“创建自定义组件”功能,在项目中创建一个自定义组件。 (2)在自定义组件中编写导航代码 可以在自定义组件的 template 标签中编写需要自定义导航代码。 (3)在需要使用自定义导航的页面引入自定义组件 在需要使用自定义导航的页面的 template 标签中,引入刚才创建的自定义组件。 (4)在页面中使用自定义导航 可以在页面的 template 标签中,使用刚才创建的自定义组件,来实现自定义导航。 总的来说,Uniapp 微信小程序定义导航的实现方法比较简单。可以使用插件方式或者自定义组件方式。如果你的项目已经使用 uni-navigationBar 插件,可以直接使用该插件实现自定义导航;如果你需要自定义更多的样式或交互效果,可以自己编写一个自定义组件。在实际开发中,可以根据项目需求和个人喜好选择适合自己的方式来实现自定义导航。 ### 回答3: Uniapp 是一款跨端应用开发框架,可以同时开发出运行于多个平台的应用程序。在 Uniapp 中,为了更好地适应不同平台的导航样式需求,Uniapp 提供了一套自定义导航的解决方案。本文将介绍如何使用 Uniapp 的自定义导航功能来开发微信小程序Uniapp 提供了两种自定义导航的方式:native 和 js 组件两种方式。 1. native 方式: 使用 native 方式,可以直接使用小程序原生的导航组件,Uniapp 会提供一些额外的 API、样式、事件来方便我们在开发过程中进行调整。 2. js 组件方式: 使用 js 组件方式,可以完全自定义导航的样式和行为,包括可以将导航设置为全局组件,方便在应用程序的多个页面中复用和调用。 下面我们将以 js 组件方式为例,介绍如何使用 Uniapp 的自定义导航功能来开发微信小程序。 第一步,在 App.vue 中定义定义导航组件: ``` <template> <view class="app"> <!-- 引入自定义导航组件 --> <custom-nav-bar title="自定义导航"></custom-nav-bar> <!-- 页面内容 --> <router-view></router-view> </view> </template> <script> export default { components: { // 引入自定义导航组件 'custom-nav-bar': () => import('@/components/CustomNavBar.vue') } } </script> <style> /* 自定义导航样式 */ .uni-nav-bar { height: uni-status-bar-height + 44px; padding-top: uni-status-bar-height; display: flex; justify-content: center; align-items: center; background-color: #fff; color: #000; position: relative; z-index: 100; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); } .uni-nav-bar__title { font-size: 18px; } </style> ``` 第二步,定义定义导航组件的样式和功能: ``` <template> <view class="uni-nav-bar"> <!-- 导航左侧返回按钮 --> <view class="uni-nav-bar__left" @tap="back"> <text class="uni-nav-bar__back">返回</text> </view> <!-- 导航标题 --> <view class="uni-nav-bar__title">{{ title }}</view> </view> </template> <script> export default { props: ['title'], methods: { // 导航左侧返回按钮点击事件 back () { uni.navigateBack() } } } </script> <style> /* 导航样式 */ .uni-nav-bar { height: 44px; padding: 0 16px; display: flex; justify-content: space-between; align-items: center; background-color: #fff; color: #000; position: relative; z-index: 100; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); } .uni-nav-bar__left { width: 70px; display: flex; flex-direction: row; justify-content: flex-start; align-items: center; } .uni-nav-bar__back { font-size: 16px; color: #000; } .uni-nav-bar__title { font-size: 18px; } </style> ``` 以上即为使用 Uniapp 的自定义导航功能来开发微信小程序的完整示例。通过以上代码,我们定义了一个自定义导航组件 CustomNavBar,并且在 App.vue 中引入和展示了该组件。 在实际开发过程中,我们可以根据自己的需求来调整自定义导航的样式和功能,比如在导航右侧添加按钮、增加搜索等等。同时,也可以将自定义导航组件设置为全局组件,方便在应用程序的多个页面中复用和调用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值