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

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

/**
 * 头部自定义导航栏
 * 
 * 参数:
 * show: 显示导航标题栏,默认显示
 * title: 导航栏标题
 * bgColor: 导航栏背景颜色,默认透明'transparent'
 * noSticky: 取消导航栏粘性布局(不占头部导航栏位置),默认不取消
 * opacity: 导航栏透明度,默认1不透明
 * showNavBtn: 是否显示左侧导航按钮,默认true显示
 * navIcon: 用户自定义导航按钮图标路径
 * navHome: 导航按钮为主页home,与返回back互斥,默认false显示返回back
 * 
 * 外部样式类:(使用时注意权重,添加外部样式类无效果的时候,给类加点权重就可以了)
 * custom-icon-class: 标题左侧图标外部样式类
 * custom-title-class: 标题外部样式类
 * custom-root-class: 根节点外部样式类
 * 
 * 事件:
 * onBack: 用户点击左上角返回按钮后回调
 * onHome: 用户点击左上角Home按钮后回调
 * onIcon: 用户点击自定义icon后回调
 * 
 * 使用:在页面的json文件中
 * "usingComponents": {
 *    "header-nav-bar": "/components/HeadNavBar/HeadNavBar"
 * },
 */

wxml:

<view class="navbar custom-root-class" style="height:{{navHeight}}px; background:{{bgColor}}; position: {{noSticky ? 'fixed':'sticky'}}; opacity: {{opacity}};" wx:if="{{show}}">
  <view class="navbar-container" style="padding-top:{{navTop}}px;">
    <!-- 导航按钮 -->
    <view wx:if="{{showNavBtn}}">
      <!-- 默认显示返回,若添加isShowHome属性则显示主页,添加isShowCustomIcon则显示用户自定义icon -->
      <view class="navbar-btn" wx:if="{{navIcon}}" bindtap="navBtn">
        <image class="navbar-icon custom-icon-class" src="{{navIcon}}"></image>
      </view>
      <view class="navbar-btn" wx:elif="{{navHome}}" bindtap="navHome">
        <image class="navbar-icon custom-icon-class" src="./images/home.svg"></image>
      </view>
      <view class="navbar-btn" wx:else bindtap="navBack">
        <image class="navbar-icon custom-icon-class" src="./images/back.svg"></image>
      </view>
    </view>
    <!-- 中间标题 -->
    <view class="navbar_title custom-title-class">
      <text>{{title}}</text>
      <!-- 具名插槽 -->
      <view style="display: inline-block;">
        <slot name="titleSlot"></slot>
      </view>
    </view>
  </view>
</view>

js:

const app = getApp()
Component({
  // 外部样式类
  externalClasses: ['custom-icon-class', 'custom-title-class', 'custom-root-class'],
  // 组件的属性列表
  properties: {
    show: {
      type: Boolean,
      value: true
    },
    title: {
      type: String,
      value: '标题'
    },
    bgColor: {
      type: String,
      value: 'transparent'
    },
    noSticky: {
      type: Boolean,
      value: false
    },
    opacity: {
      type: Number,
      value: 1
    },
    showNavBtn: {
      type: Boolean,
      value: true
    },
    navIcon: {
      type: String,
      value: ''
    },
    navHome: {
      type: Boolean,
      value: false
    },
  },
  options: {
    // 在组件定义时的选项中启用多 slot 支持
    multipleSlots: true // 复数插槽: 是
  },
  // 组件的初始数据
  data: {
    // 导航栏数据
    navHeight: 0,
    remainHeight: 0,
    navTop: 0
  },
  // 生命周期函数推荐写法
  lifetimes: {
    // 生命周期函数,可以为函数,或一个在methods段中定义的方法名
    // 在组件实例进入页面节点树时执行
    attached: function () {
      // 设置导航栏,获取菜单按钮的布局位置信息
      let menuButtonObject = wx.getMenuButtonBoundingClientRect()
      // 获取系统信息
      wx.getSystemInfo({
        success: (res) => {
          // console.log(res);
          // 状态栏的高度
          let statusBarHeight = res.statusBarHeight
          // 胶囊按钮与顶部的距离
          let navTop = menuButtonObject.top
          // 导航栏高度
          let navHeight = statusBarHeight + menuButtonObject.height + (menuButtonObject.top - statusBarHeight) * 2
          // 除导航栏剩余高度
          let remainHeight = res.windowHeight - navHeight
          // 设置录入数据属性
          this.setData({
            navHeight: navHeight, // 导航栏高度
            remainHeight: remainHeight, // 除导航栏剩余高度
            navTop: navTop // 胶囊按钮与顶部的距离
          })
          // 子传父,将导航栏高度传过去
          /* this.triggerEvent('getNavHeight', {
              navHeight: this.data.navHeight
          }) */
          // 将导航栏高度设置进全局数据
          app.globalData.navHeight = navHeight
          // 将除导航栏剩余高度设置进全局数据
          app.globalData.remainHeight = remainHeight
        },
        fail(err) {
          console.log(err)
        }
      })
    },
    // 在组件实例被从页面节点树移除时执行
    detached: function () {}
  },
  // 组件的方法列表
  methods: {
    // 回退
    navBack() {
      wx.navigateBack()
      this.triggerEvent('onBack')
    },
    // 回主页
    navHome() {
      wx.switchTab({
        url: '/src/pages/home/home'
      })
      this.triggerEvent('onHome')
    },
    navIcon() {
      this.triggerEvent('onIcon')
    }
  },
})

wxss:

.navbar {
  width: 100vw;
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 100;
  box-sizing: border-box;
}

.navbar-container {
  position: relative;
  width: 100vw;
  height: 64rpx;
  z-index: 100;
  display: flex;
  box-sizing: border-box;
}

.navbar-btn {
  width: 64rpx;
  height: 64rpx;
  z-index: 100;
  position: absolute;
  left: 24rpx;
  display: flex;
  align-items: center;
}

.navbar-icon {
  width: 36rpx;
  height: 36rpx;
}

.navbar_title {
  width: 100%;
  height: 64rpx;
  line-height: 64rpx;
  color: #000;
  font-weight: 700;
  text-align: center;
  box-sizing: border-box;
  text-overflow: ellipsis;
  overflow: hidden;
  white-space: nowrap;
}

样例:

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

支持透明,标题部分可插槽

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

支持渐变色

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

 常规居中,左上角icon可自定义,本地或者网络路径皆可

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

或者无标题,只有左上角icon

文件链接:

https://download.csdn.net/download/qq_48702470/87815185

文件解压缩至项目根目录下的components文件夹下即可

使用:在想要使用页面的json文件中或者全局app.json文件中
"usingComponents": {
   "header-nav-bar": "/components/HeaderNavBar/HeaderNavBar"
}

即可使用<header-nav-bar></header-nav-bar>

2023.5.24更新文章来源地址https://www.toymoban.com/news/detail-510703.html

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

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

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

相关文章

  • 【微信小程序创作之路】- 小程序窗口整体配置(导航栏、标题)

    第五章 微信小程序窗口导航栏配置 本章主要介绍小程序窗口导航栏、窗口下拉、窗口上拉、标题等设置。 微信小程序通过 app.json 文件中的 entryPagePath 对象来指定小程序的首页。常见情景是从微信聊天列表页下拉启动、小程序列表启动等。如果不填,将默认为 pages 列表的第

    2024年02月16日
    浏览(36)
  • 微信小程序自定义头部状态栏+滚动头部半透明效果

    需求一:头部图片贯穿手机状态栏,及nav的标题胶囊等:(返回图标 标题 胶囊) 思路:状态栏那一横块自定义后会自动往上跑,下方背景图片块默认向上填充,此时两块是重叠状态 通过微信自带方法设置状态栏高度,宽度等

    2024年02月15日
    浏览(37)
  • 如何获取data中的值?如何取出,存储数据?跳转外部链接?与非本机联调?修改头部标题?动态更改样式?动态获取设备宽高?(微信小程序)

    工具:微信开发者工具 1.如何获取data中的值? 使用 this.data. 2.如何修改data中的值?使用 this.setData({key: value}),其中key为data中修改的数据,value为要修改的值 3.如何存储数据? 1.简单数据wx.setStorage({ key: ‘key’,data: value} 2.对象类数据wx.setStorage({ key: ‘key’,data: {}} 4.跳转外部

    2024年02月10日
    浏览(66)
  • uniapp小程序自定义头部导航

    我们在开发小程序时,自带的头部导航样式往往不能满足需求,故只能自定义导航,接下来简要介绍下如何实现: 1. 去除自带的头部导航 要想自定义头部导航,首先要到pages.json文件夹中,找到对应页面,然后在style中写上代码: 2.封装自定义的头部导航 一个小程序,可能会

    2024年02月11日
    浏览(56)
  • 微信小程序自定义顶部状态栏滑动显示标题居中

    开启了自定义顶部的配置,轮播图覆盖了顶部,所以需要做一个上滑到胶囊后重新把标题重新展示出来的操作,自定义标题出现不居中情况,以下为解决后的方案,复制粘贴即可: . wxml: . . wxss: . . 滑动事件:滑动到胶囊后把标题展示出来 . . 计算胶囊按钮高度、状态栏高

    2024年02月17日
    浏览(51)
  • 微信小程序自定义底部导航栏

    微信小程序自定义底部导航栏,原生实现,不包含其他任何第三方组件,比较干净,开箱即用 效果预览: 可自定义底部导航栏列表样式 可自定义每个菜单的默认、激活后的图标和文字样式 可自定义是否添加中间的大图标菜单,当然也可自定义大图标的默认与激活样式 可自

    2024年02月07日
    浏览(55)
  • 微信小程序自定义顶部导航,滚动页面顶部导航颜色渐变

    微信小程序自定义顶部导航栏,使背景图置顶;当向上滚动页面时,实现顶部导航颜色渐变 实现方法 代码如下(示例): 提示:由于不同的手机机型顶部导航高度不一样,所有要获取手机的信息 总共三步: 1、初始化获取顶部导航信息 2、顶部导航文字上方通过view占位,同

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

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

    2024年04月27日
    浏览(37)
  • 微信小程序自定义导航栏navBar组件

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

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

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

    2024年02月04日
    浏览(52)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包