微信小程序如何实现自定义导航栏、导航栏手机适配(获取导航栏、状态栏高度和胶囊位置)以及踩过的坑

这篇具有很好参考价值的文章主要介绍了微信小程序如何实现自定义导航栏、导航栏手机适配(获取导航栏、状态栏高度和胶囊位置)以及踩过的坑。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景:不用官方默认的导航栏,想用自己自定义的

实现效果:微信小程序如何实现自定义导航栏、导航栏手机适配(获取导航栏、状态栏高度和胶囊位置)以及踩过的坑,微信小程序,notepad++,小程序,前端,javascript

关键词:顶部状态栏、顶部导航栏、顶部状态导航栏、胶囊

原理:微信小程序如何实现自定义导航栏、导航栏手机适配(获取导航栏、状态栏高度和胶囊位置)以及踩过的坑,微信小程序,notepad++,小程序,前端,javascript

自定义导航栏无非就是求得导航栏高度,并让内容容器垂直方向居中于导航栏高度

1.获取手机系统状态栏高度

2.获取胶囊位置(包括高度)

3.求得导航栏高度(导航栏高度实际上就是胶囊高度+高度差*2)

高度差 = 胶囊位置到屏幕顶部距离(menu.top,menu为胶囊位置对象)-状态栏高度(直接获取res.statusBarHeight)

(所有单位长度默认px)


     // 获取手机系统信息
     wx.getSystemInfo({
      success: res => {
     
        // 手机系统状态栏高度
        wx.setStorageSync('statusBarHeight', res.statusBarHeight)

        const platform = res.platform
        const menu =  wx.getMenuButtonBoundingClientRect()

        //menu为胶囊,判断是否能读到胶囊位置,读不到则用具体一般数值表示
        if (menu) {
          wx.setStorageSync('menu', menu)

          // 导航栏高度
          wx.setStorageSync('navBarHeight', menu.height+(menu.top-res.statusBarHeight) *2 )

          // 状态栏加导航栏

          wx.setStorageSync('navStatusBarHeight', res.statusBarHeight+ menu.height+(menu.top-res.statusBarHeight) *2 )


        }else{
          wx.setStorageSync('menu', null)

          // 导航栏高度
          wx.setStorageSync('navBarHeight', platform === 'android' ? 48 : 44)

           // 状态栏加导航栏

           wx.setStorageSync('navStatusBarHeight', res.statusBarHeight+ (platform === 'android' ? 48 : 44) )

        }

      }, fail(err) {
        console.log(err);
      }
    })

那么如何保持胶囊位置左边的搜索图标呢?

获取到胶囊到屏幕左侧的值,意思是menu.left,让容器等于这个menu.left值,然后让图标水平靠右即可

微信小程序如何实现自定义导航栏、导航栏手机适配(获取导航栏、状态栏高度和胶囊位置)以及踩过的坑,微信小程序,notepad++,小程序,前端,javascript

示例代码:

wxml

<view class="navigation-container" style="{{'height: ' + navStatusBarHeight +'px'}}">
  <!--空白来占位状态栏-->
  <view style="{{'height: ' + statusBarHeight +'px'}}"></view>
  <!--自定义导航栏-->
  <view class="navigation-bar" style="{{'height:' + navBarHeight +'px'}}">
    <view class="nav-title" style="height: 100%;">
      <view class="bg-logo">
        <text style="letter-spacing: 2rpx;font-weight: bold;font-size: 18px;">翡翠世界</text>
        <text style="font-size: 26rpx;letter-spacing: 2rpx;font-size: 10px;">交易走淘宝 | 48H鉴赏期</text>
      </view>
    </view>
    <view class="nav-search" style="height: 100%;width: {{menu.left ? menu.left : 281}}px;">
      <image  bindtap="search" src="../../images/icon/search.png" style="width:25px;height: 25px;padding-right: 10px;" />
    </view>
  </view>
</view>

js


  data: {

    // 状态栏高度
    statusBarHeight: wx.getStorageSync('statusBarHeight'),
    // 导航栏高度
    navBarHeight: wx.getStorageSync('navBarHeight'),

    // 导航栏和状态栏高度
    navStatusBarHeight: wx.getStorageSync('navStatusBarHeight'),

    // 胶囊
    menu:wx.getStorageSync('menu')

  },

wxss

/* 自定义导航栏 */

.navigation-container {
  position: fixed;
  width: 100%;
  z-index: 99;
  background-color: rgb(28, 190, 96);
}
.navigation-bar {
  position: relative;
  width: 100%;
  display: flex;
  flex-direction: row;
  color: #333333;
}


.nav-title {
  display: flex;
  
  margin-left: 20rpx;
  box-sizing: border-box;
}

.nav-search {
  position: absolute;
  display: flex;
  justify-content: flex-end;
  align-items: center;
}





.bg-logo {
  width: 300rpx;
  display: flex;
  flex-direction: column;
  color: #f7f7f7;
  position: absolute;
  top: 0;
  left:20rpx;
}

踩过的坑

1.误用rpx,因为想着适配一下手机设备高度,就将设备获取到的高度×2,再把单位换成rpx,这会导致“不可预料的事情发生”,后面导航栏那块高度就统一用px了,字体当然也用px了,其实在计算导航栏的时候以及根据设备来计算出px值了,实际上已经适配过一次高度,字体大小另说。

2.系统获取到的胶囊位置,距离右屏幕的值是个未解之谜,理论上是很小的,但是获取到的right大到有几百,本来我是想通过这个属性来计算搜索图标的位置的,right比left还要大就很奇怪。

微信小程序如何实现自定义导航栏、导航栏手机适配(获取导航栏、状态栏高度和胶囊位置)以及踩过的坑,微信小程序,notepad++,小程序,前端,javascript文章来源地址https://www.toymoban.com/news/detail-838786.html

到了这里,关于微信小程序如何实现自定义导航栏、导航栏手机适配(获取导航栏、状态栏高度和胶囊位置)以及踩过的坑的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序自定义头部标题导航栏

    wxml: js: wxss: 样例: 支持透明,标题部分可插槽 支持渐变色  常规居中,左上角icon可自定义,本地或者网络路径皆可 或者无标题,只有左上角icon 文件链接: https://download.csdn.net/download/qq_48702470/87815185 文件解压缩至项目根目录下的components文件夹下即可 使用:在想要使用

    2024年02月11日
    浏览(35)
  • 微信小程序(uniapp)自定义导航栏

    微信小程序原生页面导航栏,无法进行自定义交互,如想实现类似下图的效果,就得使用自定义导航栏 这里使用到uView的组件u-navbar 。 提示:以下是本篇文章正文内容,下面案例可供参考 导航栏样式分为两种 default/custom,custom即取消默认的原生导航,默认为default。 原生导航

    2024年04月27日
    浏览(27)
  • 微信小程序自定义导航栏返回和标题

    1.新建组件 index.json navbar.wxss index.ts index.wxml 组件定义完毕 2.修改app.ts文件,获取胶囊和系统信息 3.在具体页面中引用,index.wxml 修改对应index.ts文件 4.实现效果  参考:微信小程序实现原生导航栏和自定义头部导航栏_微信小程序头部导航栏_花铛的博客-CSDN博客 微信小程序自定

    2024年02月10日
    浏览(30)
  • 微信小程序自定义导航栏navBar组件

    参考链接,第二个链接下滑时导航栏变白色好用微信小程序自定义navigationBar顶部导航栏,兼容适配所有机型(附完整案例)_小程序自定义导航栏-CSDN博客  【微信小程序开发(二)】自定义导航栏_微信小程序分类导航栏-CSDN博客 一.创建navBar组件 1.components下创建navBar文件夹

    2024年04月25日
    浏览(45)
  • 微信小程序自定义顶部导航,附加返回主页按钮

      目录 一、修改对应json文件 二、获取微信小程序原生顶部导航栏的高  三、获取胶囊的宽高 四、设置wxml页面样式  话不多说,先上效果!!!       首先,我们都知道,通过原生小程序是不具备左侧胶囊的效果的,所以在实现这个功能的时候一定要记得修改当前页的jso

    2024年02月04日
    浏览(36)
  • 微信小程序自定义tabbar导航栏,中间凸出样式

    这种样式的底部导航栏 使用微信小程序的自定义tabBar:微信小程序官方说明 uni.app=在  page.json   中的  tabBar  项指定  custom   字段为true: 在根目录创建custom-tab-bar目录, 注意一定要完全匹配,不要输错 :  index.js代码: 注意这里的中间需要凸出项设置一个class index.json代码

    2024年02月09日
    浏览(32)
  • 微信小程序自定义导航栏定位及胶囊按钮图解

    在自定义小程序导航栏时,右上角的胶囊(MenuButton)在不同机型测试,会发现很难适配。 实测中 不同的手机,胶囊高度不一样、状态栏高度不一样。与模拟器显示的情况是不一样的。 由于小程序在不同的手机上顶部布局会发生变化,不能正确避开胶囊位置,所以通过官方给

    2024年04月25日
    浏览(30)
  • 微信小程序、uniapp自定义底部导航栏(附源码)

    需求分析 目前开发一套“同城跑腿平台”小程序,面向用户和骑手,需要两个不同的底部导航,uniapp原生导航不满足要求。所以需要自定义导航栏。 随着自定义导航卡完成,切换选项卡页面总是闪烁,在网上也没有搜到完整的解决方法,总不能完美解决。现在我有一个方法

    2024年02月04日
    浏览(47)
  • 微信小程序基于vant的自定义底部导航栏

    基于vant-weapp的底部导航栏,首先根据vant官网安装vant https://vant-ui.github.io/vant-weapp/#/quickstart 由于vant的Tabbar 标签栏自带翻页效果,而且不够美观,且小程序最多只支持10个页面栈,点击多了会导致报错 报错如下  将wx.navigateTo改为wx.redirectTo在反复多点很多次之后依然会报错,所

    2024年02月13日
    浏览(34)
  • 微信小程序之绘制多个marker以及调用手机地图软件导航

    此文章是为了说明使用微信小程序在腾讯地图上绘制多个marker地图点;然后点击某一个marker进行导航的信息;具体的功能演示如下: 一、功能演示 二、前端布局代码 view style=\\\"display: flex;flex-direction: column;\\\" //地图的布局文件信息   map class=\\\"mapUI\\\" id=\\\"myMap\\\" scale=\\\"13\\\" bindmarke

    2024年02月06日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包