微信原生小程序自定义顶部导航

这篇具有很好参考价值的文章主要介绍了微信原生小程序自定义顶部导航。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

都2023了,自定义顶部导航应该不是什么新鲜事了,这里只是简单记录下
微信自己也提供了自定义顶部导航navigation-bar,大概看了下,可配置的也不少,所以看需求了,如果简单可以采用微信提供的,老规矩,先看效果
微信小程序顶部栏,微信,小程序

1、补充几个前置知识

  1. 状态栏高度(getSystemInfoSync),就是手机顶部网络那块的高度
  2. 胶囊位置信息(getMenuButtonBoundingClientRect),右边那个像胶囊一样的东西,通过它我们可以知道高度,计算出右边的padding
    微信小程序顶部栏,微信,小程序
    综上可知,整导航栏的高度其实是 1 所在区域 = 状态栏高度 + 胶囊高度 + ( 胶囊距离顶部 - 状态栏高度 ) * 2

因为,胶囊和状态栏之间还有一定间隙,所以完整的高度需要 胶囊距离顶部 - 状态栏高度

2、实现

首先需要知道上面说的那几个位置信息,思路分析

  1. 通常这些信息在小程序启动的时候获取一次就行了,所以我们需要做两手准备,如果全局里面没有,则导航组件再自己获取一次
  2. 如果没有获取到,应该有默认值(这时候样式肯定有不好看,不过没办法~)
  3. 顶部一般是定位固定的,所以用了导航组件后,应该有一个盒子用于占位补充定位导致塌陷的高度

3、完整代码如下

js如下

// component/navBar/navBar.js
const app = getApp()
Component({
  /**
   * 组件的属性列表
   */
  properties: {
    // 标题
    title: {
      type: String,
      value: ''
    },
    // 是否需要返回
    hasBack: {
      type: Boolean,
      value: false
    },
    // 背景色
    bgc: {
      type: String,
      value: 'linear-gradient(to top, #96fbc4 0%, #f9f586 100%)'
    },
    // 是否固定
    isFixed: {
      type: Boolean,
      value: true
    }
  },

  /**
   * 组件的初始数据
   */
  data: {
    navInfo: {
      paddingLeft: 0, 
      paddingTop: 0,
      navHeight: 0 
    },
  },
  /**
   * 生命周期钩子
   * **/ 
  lifetimes: {
    created() {
      const { getSystemInfoSync, menuInfo} = app.globalData
      if(!Object.keys(getSystemInfoSync).length || !Object.keys(menuInfo).length) {
        console.warn('没有胶囊位置信息,重新获取中')
        this.customNavBarInfo()
      }
    },
    attached() {
      // 计算导航高度信息
      this.getNavBarInfo()
    }
  },
  /**
   * 组件的方法列表
   */
  methods: {
    /**
     * 计算导航高度信息
     * **/ 
    getNavBarInfo() {
      // 防止没有获取到位置信息
      let navInfo = {
        paddingLeft: 7, // 默认胶囊距离屏幕右边的距离
        paddingTop: 20,// 默认
        navHeight: 44 // 默认导航栏高度
      }
      if(Object.keys(app.globalData.menuInfo).length && Object.keys(app.globalData.getSystemInfoSync).length) {
        const { top,height,right,width } = app.globalData.menuInfo
        const { statusBarHeight,windowWidth } = app.globalData.getSystemInfoSync
        navInfo = {
          paddingLeft: windowWidth - right, 
          paddingTop: statusBarHeight,
          navHeight: height + ( top - statusBarHeight ) * 2,
          menuWidth: width
        }
      }
      this.setData({
        navInfo
      })
    },
    /**
     * 获取胶囊位置信息
     * **/ 
    customNavBarInfo() {
      app.globalData.menuInfo = wx.getMenuButtonBoundingClientRect()
      app.globalData.getSystemInfoSync = wx.getSystemInfoSync()
    },
  }
})

css如下

.nav{
  display: flex;
  align-items: center;
}
// 这是笔者写一个宽度,需要根据自己情况调整
.left{
  width: 80rpx;
}
.custom-nav{
  z-index: 999;
  top: 0;
  right: 0;
  left: 0;
}

通常在app.js里面提前获取一次文章来源地址https://www.toymoban.com/news/detail-617287.html

App({
  onLaunch() {
    this.globalData.menuInfo = wx.getMenuButtonBoundingClientRect() || {}
    this.globalData.getSystemInfoSync = wx.getSystemInfoSync() || {}
  },
  globalData: {
    // 完整胶囊信息
    menuInfo: {},
    // 完整系统信息
    getSystemInfoSync: {},
  }
})

到了这里,关于微信原生小程序自定义顶部导航的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 微信小程序云开发之自定义顶部导航栏搜索框(非组件)

    提到微信小程序,就不得不提到它那磨人的顶部导航栏,真的有被丑到。身为强迫症患者,笔者实在是难以忍受,好在官方提供了解决方案,但是对于初学者还是有一丢丢的难度,为了初学者不在重蹈笔者的老路,这篇文章就给大家分享一下如何做一个好看的自定义顶部导航

    2024年02月10日
    浏览(42)
  • uni-app微信小程序,APP都适用自定义顶部导航

    *使用自定义的导航样式,首先需要把原生的顶部的导航方式给隐藏掉(\\\"navigationStyle\\\": \\\"custom\\\") *手机顶部手机状态栏的高度 *微信小程序中胶囊的位置信息存储(使用store存储) *由于微信小程序中带有导航胶囊,所以需要根据胶囊去获取一定的参数信息 在微信小程序中,我们只需要获

    2024年02月06日
    浏览(65)
  • 微信小程序第一节 —— 自定义顶部、底部导航栏以及获取胶囊体位置信息。

    dai ga hou啊!我是 😘😘😘 是江迪呀 。我们在进行微信小程序开发时,常常需要自定义一些东西,比如 自定义顶部导航 、 自定义底部导航 等等。那么知道这些自定义内容的具体位置、以及如何适配不同的机型就变得尤为重要。下面让我以在iPhone机型,来给大家介绍下 微信

    2024年02月02日
    浏览(58)
  • 微信小程序自定义顶部导航栏的胶囊和微信自带的胶囊一样的透明背景色

    想要实现微信自带的右上角胶囊背景透明很简单,只需要在pages.js里面设置下面配置就可以了: 但是设置完这个后,胶囊的背景色是那种黑色半透明的效果:(微信开发者工具和真机上显示的效果不一致,要以真机为准) 手机端的效果:所以还是要以手机端为准   左侧的返

    2024年02月01日
    浏览(41)
  • 微信小程序自动获取顶部导航栏高度

    1、本人是通过uniapp开发的微信小程序,原生开发基本相同,首先在data里声明变量 2、其次在onLoad生命周期中获取当前手机的导航栏宽高数据 3、navHeight获取的是当前手机型号的导航栏总高度;searchMarginTop获取的是手机顶部到小程序胶囊的高度,也就是下图黄色线框的高度;

    2024年02月11日
    浏览(73)
  • 【微信小程序】头部导航栏背景铺满顶部

    背景:使用uniapp开发微信小程序 需求:需要微信小程序顶部导航栏使用页面背景铺满顶部 我们可以利用 navigationStyle 属性,来处理导航栏样式,支持 default/custom,其中 custom 可自定义导航栏,只保留右上角胶囊状的按钮。 在pages.json 文件里,将globalStyle中新增或修改 navigatio

    2024年02月16日
    浏览(51)
  • H5+微信小程序中顶部导航设置:app-plus

    首先uniapp代码在微信小程序和App、H5之间有时候是不兼容的,例如正常通过app-plus设置顶部导航,H5端是合适的 目的效果展示的结果:如图所示,我们需要实现这样的效果 顶部没有出现搜索的图标和消息的图标 https://uniapp.dcloud.net.cn/collocation/pages.html#app-titlenview-searchinput 如图我

    2024年02月08日
    浏览(47)
  • 微信小程序怎么隐藏顶部导航栏(navigationBar)变透明的解决方案

    怎么隐藏小程序顶部导航栏(navigationBar)? 官网说: Navigation 是小程序的顶部导航组件,当页面配置  navigationStyle  设置为  custom  的时候可以使用此组件替代原生导航栏。 那么,我们就知道这种效果是可以实现的,其实代码实现也超级简单,下面请看代码配置: 一、全局

    2024年02月08日
    浏览(54)
  • 微信小程序首页、界面布局、自定义顶部(示例一)

    具体界面见下图: 如需界面中引用的图片文件和更多功能,请滑动至底部查看下载链接,可下载完整版,下载后直接使用微信开发者工具打开即可,完整版功能更详细呦。当前界面的布局样式代码如下(如存在不足之处,请根据具体需求,自行修改): 1、js代码: 2、wxml代

    2024年02月12日
    浏览(43)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包