自定义导航栏

项目中需求: 导航栏在插画上, 这时需要采用自定义导航栏实现.

在json配置中把navigationStyle设置为custom, 这时只会保留右上角胶囊按钮.

公共的导航栏编写一个自定义组件调用.

欢迎大神们指教…

文章目录

  • 自定义导航栏
    • 效果图
    • 创建组件
      • json
      • wxml
      • wxss
      • js
    • 组件使用步骤:
      • app.json
      • app.js
      • page.js
      • page.wxml
      • page.json
    • 图二插画背景使用
      • wxml
      • wxss

效果图

创建组件

类似于页面,一个自定义组件由 json wxml wxss js 4个文件组成.

首先需要在 json 文件中进行自定义组件声明, 将component 字段设为 true

custom-component

Component

  • 新建文件夹components
  • components新建组件navbar
  • navbar组件对应文件上写code

json

首先在json文件中, 将 component 字段设为 true 可这一组文件设为自定义组件

{"component": true
}

wxml

<!--components/navbar/navbar.wxml-->
<view><view class='nav bg' style='height:{{navH}}px'><view class='nav-title'>{{pageName}}<image src='/libs/assets/images/goBack.png' mode='aspectFit' class='back' bindtap='navBack'></image></view></view>
</view>

wxss

/* components/navbar/navbar.wxss */.nav {width: 100%;overflow: hidden;position: fixed;top: 0;left: 0;z-index: 10;
}.nav-title {width: 100%;height: 45px;line-height: 45px;text-align: center;position: absolute;bottom: 0;left: 0;z-index: 10;font-family: PingFang-SC-Medium;font-size: 34rpx;color: #fff;letter-spacing: 1px;
}.nav .back {width: 20px;height: 20px;position: absolute;bottom: 0;left: 0;padding: 10px 15px;
}.bg {background-color: #345098;
}

js

// components/navbar/navbar.jsconst app = getApp();Component({/*** 组件的属性列表*/properties: {pageName: String,},/*** 组件的初始数据*/data: {navH: 0,navbarData: {showCapsule: 1}},lifetimes: {attached: function () {this.setData({navH: app.globalData.navHeight})}},/*** 组件的方法列表*/methods: {//回退navBack: function () {wx.navigateBack({delta: 1})}}
})

组件使用步骤:

  1. 需在app全局中进行相关操作, 2. 在需要中page中使用该组件

app.json

app.json下的window配置 navigationStylecustom

"window": {"navigationStyle": "custom"
},

app.js

注意: 在app.js全局定义导航高度navHeight, 否则有可能遇到navHeightundefined

/*** 获取手机系统信息*/
wx.getSystemInfo({let that = this;success: res => {//导航高度  状态栏高度 + 导航栏高度44(这时写46)that.globalData.navHeight = res.statusBarHeight + 46;}, fail(err) {console.log(err);}
})/**
* 全局变量
*/
globalData: {navHeight: 0,
}

page.js

在需要的页面.js中获取 导航栏高度

const app = getApp();Page({/*** 生命周期函数--监听页面加载*/onLoad: function (options) {this.setData({navH: app.globalData.navHeight})},
})

page.wxml

在需要的页面.wxml中 使用navbar组件

注意: 默认会给导航栏覆盖, 需设置属性等margin-topheight:calc(100vh - {{navH}}各所需

<view class='indexWrap'><!-- navbar组件 --><navbar page-name="当前title"></navbar><!--内容--><view class='content' style='margin-top: {{navH}}px'></view>
</view>

page.json

引入navbar组件, 注意路径

"usingComponents": {"nav-bar": "/commpents/navbar/navbar",
}

图二插画背景使用

图二有插画, 这时不能引入公共的组件直接使用了. 需进行修改如下

wxml

使用 wx.getSystemInfoSync()['statusBarHeight']则能获取到顶部状态栏的高度,单位为px.
iPhonex、xr、max等状态栏高度为90px, 其他小屏iPhone设备为66px

<view class='userWrap'><!-- 背景插画 --><view class='userBg'><!-- 导航栏  style='height:{{navH}}px' --><view class='customNav' style='padding-top:{{navH}}px'><view class='nav-title'>我的<image src='/libs/assets/images/goBack.png' mode='aspectFit' class='back' bindtap='navBack'></image></view></view><!-- 内容同样距离顶部状态栏的高度--><view class="headBox" style='padding-top:{{navH}}px'></view></view>
</view>

wxss

.userBg {margin: 0 auto;@include wh(100%, 300rpx);@include bis("背景图片");
}/** 自定义导航栏 */
.customNav {width: 100%;overflow: hidden;position: fixed;top: 0;left: 0;z-index: 10;display: flex;align-items: center;.nav-title {width: 100%;height: 45px;line-height: 45px;text-align: center;position: absolute;bottom: 0;left: 0;z-index: 10;font-family: PingFang-SC-Medium;font-size: 36rpx;color: #fff;letter-spacing: 1px;}.back {width: 20px;height: 20px;position: absolute;bottom: 0;left: 0;top: 50%;transform: translateY(-50%);padding: 0px 30rpx;display: flex;align-self: center;align-items: center;}
}

感谢大神们

参考一

参考二

微信小程序自定义navbar相关推荐

  1. 微信小程序-自定义NavBar组件

    组件化 组件化本身是一个可以讲的很大,也可以浓缩为 封装可复用的,模版组件 基于mvvm的微信小程序当然也支持这一特性,我们做项目的时候也可以把注入公用的header footer之类的封一封(其实工 ...

  2. 微信小程序自定义导航栏(带汉堡包菜单)

    微信小程序自定义导航栏(带汉堡包菜单) 1.在app.json中 window配置navigationStyle (如果单独页面使用,可在页面的json文件配置) 2.计算相关值 整个导航栏的高度: ...

  3. 微信小程序自定义导航栏 navigation bar 返回键 首页

    微信小程序自定义导航栏(wx_custom_navigation_bar) 自定义返回键.首页键,动态设置标题,响应式组件 版本号:2.0.0 作者:chen-yt github: https://g ...

  4. 微信小程序自定义navigationbar与下拉刷新思考

    第一次开发小程序,产品提出要求导航栏字体样式,然后系统的未提供修改的接口. 那么只能自定义导航栏才行呀. 迅速的自定义了一个导航栏 app.json中添加 "navigationStyle& ...

  5. 微信小程序自定义导航栏返回和标题

    1.新建组件 index.json {"component": true } navbar.wxss //navbar.wxss .navbar{width: 100%;//设置导 ...

  6. (转载)微信小程序自定义头部导航栏

    本文转载自微信小程序自定义头部导航栏 微信小程序自定义头部导航栏 先看下demo的效果: 最终要实现的效果: 在tabbar页面不显示左侧按钮: 分享出去的页面进入后不显示左侧返回按钮: 点击返回按钮 ...

  7. 微信小程序-自定义导航栏

    微信小程序-自定义导航栏 第一步 添加属性 "navigationStyle": "custom" 第二步 自定义导航栏 第二步 自定义组件 第四步 使用组件 ...

  8. 微信小程序自定义导航栏组件

    效果图 首先要先在 json文件里加上 "navigationStyle":"custom", 这句,去掉原生的自定义导航栏 一.子组件-wxml <vi ...

  9. 微信小程序自定义授权弹框

    微信小程序自定义授权弹框 最近微信获取用户信息的接口有调整,就是这货:wx.getUserInfo(OBJECT),文档描述如下: 此接口有调整,使用该接口将不再出现授权弹窗,请使用 <butt ...

最新文章

  1. 刻意练习:Python基础 -- Task12. 模块
  2. Python 包管理工具解惑
  3. 微信小程序函数调用监控
  4. EMS server Tibco
  5. python自动化数据报告_如何:使用Python将实时数据自动化到您的网站
  6. 服务器上的Linux中Tomcat有时会挂掉的问题及方法
  7. 【面向对象】面向对象程序设计测试题8-对象之间one-to-many关系测试题
  8. (06)VHDL实现计数器
  9. python资料-大牛分享python资料
  10. 一张图学会python应用到excel-Python应用之------Excel操作
  11. c++工程模式+配置文件+动态调用类
  12. android判断正确密码,Android 监听EditText输入框 ,判断输入的密码是什么格式
  13. 从纯技术到技术管理,那些跌宕起伏的转型经历
  14. 软件开发项目管理经验总结
  15. 关系型数据库和主键外键
  16. 鼠标右键没有新建选项怎么办
  17. Linux Stress测压工具安装与使用详解
  18. php5.6 oracle11,解决ORA-16055: FAL request rejected
  19. font color=red[置顶]/font
  20. 数论学习四之——威尔逊定理

热门文章

  1. 使用ps命令查看进程状态
  2. 尹语堂供应链20220212
  3. 顾大松:“三位一体”的道路停车管理法治模式
  4. 图像处理工具如何正确的颜色和对比度
  5. android 上传图片进度条,Android带进度条的文件上传示例(使用AsyncTask异步任务)...
  6. bay trail android 平板,Bay trail:给平板电脑一颗大心脏
  7. 2021-2027全球与中国晶圆级光学元件(WLO)市场现状及未来发展趋势
  8. 利用新浪API实现短网址生成
  9. 063 使用Qt进行编程
  10. 二十八、路由算法和路由协议