微信小程序全屏模式(自定义导航栏)

导航栏背景图

要自定义导航栏,首先需要在app.json里设置:

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

设置之后进入小程序就只剩下右上角的胶囊了。

在设置导航栏样式时需要知道它的高度,在app.jsononLaunch里获取状态栏高度:

App({
    onLaunch: function(options) {
        wx.getSystemInfo({
            success: (res) => {
                this.globalData.statusBarHeight = res.statusBarHeight
                this.globalData.navBarHeight = 44 + res.statusBarHeight
            }
        })
    },
    globalData: {
        statusBarHeight: 0,
        screenHeight: 0
    }
})

44是导航栏除去状态栏的高度,单位px

因为导航栏每个页面都会用到,所以我们用组件会方便使用一些,这里创建一个叫nav的组件:

首先在组件js里设置statusBarHeight和一个可以通过外部设置状态栏颜色的backgroundColor的属性,默认透明。

nav.js:

const app = getApp()
Component({
    options: {
        multipleSlots: true
    },
    properties: {
        backgroundColor:{
            type: String,
            value: 'rgba(0,0,0,0)'
        }
    },
    data: {},
    ready() {
        let {
            statusBarHeight,
            navBarHeight
        } = app.globalData;

        this.setData({
            statusBarHeight,
            navBarHeight
        })
    },
    methods: {
        back() {
            wx.navigateBack({
                delta:1
            })
        }
    }
})

content里放置内容,返回按钮固定在左边。

nav.wxml:


    
    
        
        
    

nav.wxss:

.nav-wrap {
    position: fixed;
    top: 0;
    left: 0;
    width: 750rpx;
    z-index: 1;
}

.content {
    position: relative;
    width: 100%;
    height: 44px;
}

.back {
    position: absolute;
    left: 0;
    top: 0;
    width: 88px;
    height: 44px;
    background: pink;
}

在页面中使用:


page content

效果图:

效果图

这里txt里的样式、内容都是可以自定义的,如果想要使用通用样式,可以写在组件里。

比如把导航栏title放在组件里,通过外部传值设置:

nav.js:

Component({
    // ...
    properties: {
        title:{
            type: String,
            value: ''
        }
    },
    // ...
})

nav.wxml:


    
    
        {{title}}
        
    

nav.wxss:

/* ... */
.title {
    color: white;
    text-align: center;
    line-height: 44px;
    font-weight: 500;
}
/* ... */

调用

你可能感兴趣的:(微信小程序全屏模式(自定义导航栏))