首页 > 编程语言 >Uniapp微信小程序:轻松实现自定义导航栏,提升用户体验

Uniapp微信小程序:轻松实现自定义导航栏,提升用户体验

时间:2024-01-24 16:07:59浏览次数:21  
标签:Uniapp 状态栏 自定义 微信 statusBarHeight value 导航

1、引言

当涉及微信小程序的界面设计时,我们常常会发现自带的导航栏功能相对简单,仅限于显示当前页面的标题。然而,在实际开发过程中,我们往往需要更多的自由度和个性化,以满足用户体验的需求。因此,自定义导航栏成为必然选择。通过自定义导航栏,我们可以赋予小程序更多的设计灵活性和交互性,不再受限于传统的简单导航功能,更能突显个性化的特色,提升用户的整体体验感受。在本文中,我们将深入探讨如何实现自定义导航栏,并解释其对于微信小程序开发的重要性和实际应用的价值。此文章以uniapp+pinia演示。 如下:微信自定义的导航栏比较简单

Uniapp微信小程序:轻松实现自定义导航栏,提升用户体验_uniapp

看看滴滴出行,选择在导航栏部署选择城市、扫一扫等工具。

Uniapp微信小程序:轻松实现自定义导航栏,提升用户体验_uniapp_02

2、实现步骤

1、pinia创建deviceStore作为全局存储空间存储设备信息

state中保存三个数据:statusBarHeight、menuButtonInfo、navBarHeight。

2、定义一个component当作自定义导航栏(我的叫做 HeadNav),在用到自定义导航栏的页面会使用这个组件

在这个组件里此处判断storage中是否有statusBarHeight、navBarHeight两个数据,没有则执行pinia中的方法deviceStore.getInfo()获取设备信息。

3、获取到手机状态栏的高度,胶囊宽高计算出状态栏与胶囊按钮中的空隙,保存至缓存

const statusBarHeight = (uni.getStorageSync('statusBarHeight')|| ref({}))//手机状态栏的高度,这个状态来就是手机顶部的电量啊,信号这些区域的高度,如果是刘海屏,它还会包含刘海屏的高度
const menuButtonInfo = ref({})//胶囊信息,就是微信小程序自带的那个有关闭,分享按钮的胶囊。
const navBarHeight =  (uni.getStorageSync('navBarHeight')|| ref({}))//状态栏与胶囊按钮中的空隙
//缓存中没有的话就执行下面方法:
statusBarHeight.value = uni.getSystemInfoSync().statusBarHeight
menuButtonInfo.value = uni.getMenuButtonBoundingClientRect()
//然后计算出navBarHeight
navBarHeight.value = (menuButtonInfo.value.bottom - statusBarHeight.value) + (menuButtonInfo.value.top - statusBarHeight.value) //状态栏与胶囊按钮中的空隙

4、设置允许自定义状态栏,uniapp中在pages.json里面设置,微信小程序原生开发是在app.json(全局设置)或index.json(页面设置)

"path" : "ChatDetail/ChatDetail",
     "style" :                                                                                 
            {
                "navigationBarTitleText": "",
                "enablePullDownRefresh": false,
                "navigationStyle": "custom"
            }        
}

5、进入刚刚新建的component里进行状态栏占位,高度是手机状态栏的高度。

6、创建真正的导航栏内容,并给一个初始高度防止黏在状态站位栏,这个高度是状态栏与胶囊按钮中的空隙。

<!-- 状态栏占位 -->
	<view :style="{height:deviceStore.statusBarHeight+'px'}"></view>
	<!-- 真正的导航栏内容 ,请按照自己的需求自行定义-->
	<view :style="{height:deviceStore.navBarHeight+'px'}" class="nav">
		<uni-icons type="back" size="30" class="nav-back" @click="goBackIndex"></uni-icons>
		<image :src="avatar"  class="nav-avatar" @click="gotoOthersInfo"></image>
		<text class="nav-name" @click="gotoOthersInfo">{{nickname}}</text> 
	 </view>
</view>

学习资料:点此下载

标签:Uniapp,状态栏,自定义,微信,statusBarHeight,value,导航
From: https://blog.51cto.com/u_15723831/9397806

相关文章

  • uniapp 触底 请求分页接口
    <scroll-view@scrolltolower="scrollBottom"><product-list:goodspage="goodspage"></product-list></scroll-view>scrollBottom(){console.log('scrollbottom')if(this.page.current<......
  • 2024最新iOS17.3微信分身详解分享
    微信是目前最流行的社交软件之一,拥有庞大的用户群体。然而,对于一些需要同时使用多个微信账号的用户来说,使用官方版微信就显得有些不方便。iOS分身微信软件可以解决这个问题,它可以让用户在同一台设备上同时登录多个微信账号,从而实现工作生活两不误。iOS分身微信软件的优势iOS分身微......
  • 微信小程序Day3
    wx:if、wx:elif、wx:else:判断语句在js文件声明type变量 wxml文件实现对type的判断 <block>标签可将多个标签打包,而不在页面上渲染 wx:for循环语句(若未声明则索引默认为index,值为item)wxml实现语句 也可以自定义索引和值的名称 对key:value的循环语句实现js文件......
  • UniApp Vue3 动态表单
    左侧手机部分为动态表单内容,右侧为提交后获取到表单的值。页面代码:<viewstyle="margin:15px;padding:10rpx;"><tn-formlabel-position="top"ref="formRef":model="formData":rules="formRules"><tn-for......
  • 自定义异常
    //自定义异常类publicclassMyExceptionextendsException{  //传递数字》10  privateintdetail;​  publicMyException(inta){    this.detail=a; }​  @Override  publicStringtoString(){    return"MyException{"+det......
  • uniapp打包Android程序的踩坑
    因为在uniapp中无法使用dom,导致部分三方库无法使用,需要在webview中使用,所以需要把使用了dom的三方库的页面渲染到webview中去因为上面再webview中渲染了界面,所以当要再webview中和原生页面互动就又是问题了,网上找了一圈webview和uniapp原生互动的操作都没能实现,有实现了的评论下......
  • 微信小程序之条形码和二维码
    整个示例目录:index.wxml代码: <view class="container page">  <view class="panel">    <view class="header">    </view>    <view class="barcode">      <view class="barnum">......
  • uniapp+unicloud开发一个网页端,小程序端,APP端,桌面端的博客CMS系统——万能的三三
    前言做为一个开发者,怎么能没有一个自己的博客呢?都说现在是小程序,APP时代了,显然只有网页端已经跟不上时代了,于是乎就想找一个免费的能同时支持网页端,小程序,APP的博客系统...于是花了一点点时间,没找到合适的...好吧,那既然自己是开发者,那为什么不能自己写一个博客呢?于是又花亿点点时间......
  • 微信小程序个人中心模板
    wxml<view><viewclass="top"><viewclass="center"><viewclass="center_top"><viewclass="center_img"bindtap="toBaseInfo"><!--<imagesrc=&qu......
  • Vue与微信小程序开发时的区别
    Vue与微信小程序开发时的区别一,生命周期vue:跳转页面时,钩子函数都会被重新出发一次,每次进入页面所有得钩子函数都会被触发一次小程序:onload()一个页面只会被加载一次,可以在onLoad中获取打开当前页面所调用的query参数。onShow():每次打开页面都会调用一次。二、数......