在微信小程序开发时,可以自定义头部导航栏返回,先看下效果。


下面实现的方式和代码。
1、微信自定义头部:app.json里面配置: "navigationStyle": "custom"
组件index.js
// components/navbar/index.js
const app = getApp()
Component({
/**
* 组件的属性列表
*/
properties: {
title: {
type: String,
value: 'Wechat'
},
back: {
type: Boolean,
value: false
},
home: {
type: Boolean,
value: false
}
},
/**
* 组件的初始数据
*/
data: {
statusBarHeight: app.globalData.statusBarHeight + 'px',
navigationBarHeight: (app.globalData.statusBarHeight + 44) + 'px',
statusBarHeight: app.globalData.statusBarHeight+'px'
},
/**
* 组件的方法列表
*/
methods: {
backHome: function () {
wx.navigateTo({
url: '/pages/home/index',
})
},
back: function () {
wx.navigateBack({
delta: 1
})
}
}
})
index.wxml
<!--components/navbar/index.wxml-->
<view class="navbar" style="{{'height: ' + navigationBarHeight}}">
<view style="{{'height: ' + statusBarHeight}}"></view>
<view class='title-container'>
<view class='capsule' wx:if="{{ back || home }}">
<view bindtap='back' class="iconfont icon-fanhui" wx:if="{{back}}">
</view>
<view bindtap='backHome' class="iconfont icon-zhuomianzhuye" wx:if="{{home}}">
</view>
</view>
<view class='title'>{{title}}</view>
</view>
</view>
<view style="height:{{navigationBarHeight}};background: white;"></view>
index.wxss
.navbar {
width: 100%;
background-color: #fff;
position: fixed;
top: 0;
left: 0;
z-index: 999;
}
.title-container {
height: 40px;
display: flex;
align-items: center;
position: relative;
}
.capsule {
margin-left: 10px;
height: 30px;
background: rgba(255, 255, 255, 0.6);
border: 1px solid #dddddd;
border-radius: 16px;
display: flex;
align-items: center;
}
.capsule > view {
width: 45px;
height: 60%;
position: relative;text-align: center;
}
.icon-fanhui:before {
content: '';display: inline-block;width: 26rpx;height: 26rpx;
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAR1JREFUOE+t1L1KBDEQB/D/nLtisVaCCIIsWOyaBCsrKysbKwsP7LS5zkoQrAQrq6tEECsbFX2cybyCja8grESuWMJtkt27tMn8mC9CWPKhIZ7WekpEv9baGz++N2iM+QRwBuDHWru5ENjCQER3zHw/GPSwW2Z+mNeupJI97JqZp129j4IedsXMj6FBBsE21jTNREReYlvRCXrYhYi8xjB3Pxf0sHMR+UjBOkGt9TMRTf4fEI2Z+Wsh0BizB8Bltd8XDfVwd4Ye9EGDU1ZK7YxGo3cAh6lodA+VUlsz9CgFjYIOqet6I8uyNwDHMTQJdEhVVet5nrvyT0JoMuiQsizXiqJwmZ4S0Tczbw/+bVqBK1rrJwCrInK5DDC443+qIGIVtG4bDwAAAABJRU5ErkJggg==) center center no-repeat;background-size: cover;
}
.icon-zhuomianzhuye:before {
content: '';display: inline-block;width: 26rpx;height: 26rpx;
background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAAXNSR0IArs4c6QAAAaZJREFUOE/tk7FLW1EUxr9zk61Tp67SKX3v3EcRimPrUkqnOri2kS4FMZtbQVuFQJ1LqIOQLi4i2LEO1cWhW3jnPkxByF/QpW6Be+RKXojJS2J07R3v/e7vfpzvu4RbrDiOn6kqZVn2e5qcpgmsta+991+JiFS15pz7MenORGAURVVjTAPAR1UtEdFnIqqlabo7DjoWyMzrALZVteqc2w8AZn4PoEFEW2mabhVBC4HM/EVVl4loRUROBi9aa9+oanB9KCKrw9AbwCRJHnjvvwF4XCqVqq1W60+RiyRJ5lX1u6qee++rWZZd5ro+sFKpzJXL5T0Af7vd7kq73f43afjW2ofe+yMiMgDeichF0F8DoyhaMMY0VfXYObc2LfnBc2Y+APAUwFsROSNmXgLQBFAXkfossFzLzDsAPgRoAG567zvGmE4QDIcw7QFmftHTPAHwKABfishPZv4F4NMdgRsishjH8at+KEXA4L7IoYj093sOr4H9UHqlHXHYe+R0GHpvYA7IHf8HhtrMFsp9ZljUktMh4PMxVRqpTd74EX1e9oFfMVZzBb8dEcYU8lNsAAAAAElFTkSuQmCC);background-size: cover;
}
.capsule > view:nth-child(2) {
border-left: 1px solid #dddddd;
}
.capsule image {
width: 50%;
height: 100%;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%,-50%);
}
.title {
color: #333;
position: absolute;
top: 6px;
left: 104px;
right: 104px;
height: 30px;
line-height: 30px;
font-size: 16px;
text-align: center;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
index.json
{
"component": true,
"usingComponents": {}
}
app.js
onLaunch() {
//获取右上角菜单按钮的布局位置信息
let menuButtonObject = wx.getMenuButtonBoundingClientRect();
//获取系统信息
wx.getSystemInfo({
success: res => {
//console.log('xxxx', res)
//状态栏的高度
let statusBarHeight = res.statusBarHeight,
//胶囊按钮与顶部的距离
navTop = menuButtonObject.top,
navHeight = statusBarHeight + menuButtonObject.height + (menuButtonObject.top - statusBarHeight) * 2;
let globalData = this.globalData;
globalData.statusBarHeight = statusBarHeight;
globalData.navHeight = navHeight;//导航栏高度
globalData.navTop = navTop;//胶囊按钮与顶部的距离
globalData.jnheight = menuButtonObject.height;//胶囊的高度
globalData.jnwidth = menuButtonObject.width;//胶囊的宽度
},
fail(err) {
console.log(err);
}
});
},
globalData: {
statusBarHeight:0,
navHeight:0,
}
在页面时需要使用的话,先引用组件
{
"usingComponents": {
"navbar": "/components/navbar/index"
}
}
<!--pages/index.wxml--> <navbar title="这是标题" back="true" home="true"/>

