uni-app微信小程序,APP都适用自定义顶部导航

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

1.需要注意以下三点

*使用自定义的导航样式,首先需要把原生的顶部的导航方式给隐藏掉("navigationStyle": "custom")

*手机顶部手机状态栏的高度

*微信小程序中胶囊的位置信息存储(使用store存储)

2.导航布局

*由于微信小程序中带有导航胶囊,所以需要根据胶囊去获取一定的参数信息

  • 在微信小程序中,我们只需要获取胶囊的位置参数即可,详细如下(App和小程序自定义顶部): 注: 微信小程序围绕胶囊布局即可

须知:获取胶囊信息的Api

uni.getSystemInfo() ----->使用这个是为了算rpx--->px的换算系数 (返回值可去uniapp官方文档里查看)

uniapp 自定义顶部导航,uniapp微信小程序,javascript,前端,uni-app,微信小程序

 小程序默认把可使用窗口宽度分为750rpx,首先需要计算出不同机型rpx和px之间的换算比率

使用方法

uni.getSystemInfo({

    success: (res) => {

        const proportion = 750 / res.windowWidth(单位是px) // 换算比率

    }

})

uni.getMenuButtonBoundingClientRect() ----->这个返回的才是胶囊信息

uniapp 自定义顶部导航,uniapp微信小程序,javascript,前端,uni-app,微信小程序

// 使用方法
const demo = uni.getMenuButtonBoundingClientRect()

参考:

uniapp 自定义顶部导航,uniapp微信小程序,javascript,前端,uni-app,微信小程序

 3.具体实现

        1.首先需要获取我们需要用到的数据信息,并将其存储

         在uni-app项目store文件夹下创建如下结构(没有的可自行创建,并在main.is中引用store,这里就不多说了)

        uniapp 自定义顶部导航,uniapp微信小程序,javascript,前端,uni-app,微信小程序

phoneInfo.js

const state = {
  // 顶部导航参数
  phoneInfo: {},
}
​
const mutations = {
    /* 胶囊参数信息 */
    SET_PHONE_INFO(state, val){
        state.phoneInfo= val
        // 打印存储的信息 
        console.log("胶囊位置信息", state.phoneInfo);
    }
}
​
const actions = {
  getPhotoInfo({ commit }) {
      /* 获取系统参数 */
      uni.getSystemInfo({
        success: (res) => {
            const proportion = 750 / res.windowWidth // 比例
            let height
            let paddingTop
            let topNavHeight
            /* 微信小程序获取胶囊参数 */
            // #ifdef MP-WEIXIN
               const demo = uni.getMenuButtonBoundingClientRect()
               // 小程序胶囊的高度
               height = demo.height + "px" 
               // 小程序胶囊距离顶部的高度
               paddingTop = demo.top + "px"
               // 导航栏总高度
               topNavHeight= demo.height + demo.top
            // #endif
            
            
            // #ifdef APP-PLUS
                // 设备系统信息
                let systemInfomations = uni.getSystemInfoSync()
                console.log(systemInfomations);
                // 机型适配比例系数
                let scaleFactor = 750 / systemInfomations.windowWidth
                // 当前机型-屏幕高度
                let windowHeight = systemInfomations.windowHeight * scaleFactor //rpx
                // 当前机型-屏幕宽度
                let windowWidth = systemInfomations.windowWidth * scaleFactor //rpx
                // 状态栏高度
                let statusBarHeight = systemInfomations.statusBarHeight
                height= 40 + "px" // App导航栏高度可自定义(根据需求定)
                paddingTop = statusBarHeight + "px"// App状态栏高度
                // 导航栏总高度
                topNavHeight= 40 + statusBarHeight
            // #endif
            /* 写入到store */
            commit('SET_PHONE_INFO', {height, paddingTop, topNavHeight, proportion})
        }
      })
  }
}
​
export default {
  // namespaced: true 的方式使其成为带命名空间的模块。保证在变量名一样的时候,添加一个父级名拼接。
  namespaced: true,
  state,
  mutations,
  actions
}

getters.js

const getters = {
  phoneInfo: state => state.phoneInfo.phoneInfo
}
export default getters

index.js

import Vue from 'vue'
import Vuex from 'vuex'
​
import getters from './getters'
/* 单元 */
import phoneInfo from './modules/phoneInfo.js'
Vue.use(Vuex)
const store = new Vuex.Store({
    modules:{
        phoneInfo,
    },
    getters
})
​
export default store

2.调用store的方法

只需要在App.vue文件中的onLaunch周期里调用即可

App.vue

<script>
    export default {
        // 当uni-app 初始化完成时触发(全局只触发一次)
        onLaunch: function() {
            // console.log('App Launch')
            // 获取系统参数
            this.$store.dispatch('phoneInfo/getPhotoInfo')
        },
        onShow: function() {
            // console.log('App Show')
        },
        onHide: function() {
            // console.log('App Hide')
        }
    }
</script>

获取之后打印我们存储的信息phoneInfo(这样页面在使用的时候直接取store的数据就行了)

uniapp 自定义顶部导航,uniapp微信小程序,javascript,前端,uni-app,微信小程序

2.使用

1.创建导航组件

components文件夹下创建top-nav组件

top-nav.vue

<template>
    <view class="top-content" :style="[{background},{paddingTop}]">
        <view class="demo" :style="[{height}]">
            <!-- 左侧按钮 "  此处图标使用的是 uni-ui图标 -->
            <view class="item">
                <uni-icons v-if="back" :type="iconType" :size="iconSize" :color="color" @click="onBack"></uni-icons>
            </view>
            <!-- 中间标题文字 -->
            <view class="m-item" :style="[{fontSize},{color}]">
                <text>{{title}}</text>
            </view>
            <!-- 右 占位布局 -->
            <view class="item"></view>
        </view>
    </view>
</template>
​
<script>
    export default {
           name:"top-nav",
           props:{
            title: { // 标题文字(默认为空)
                type: String,
                default: ''
            },
            fontSize: { // 标题字号(默认为空)
                type: String,
                default: '32rpx'
            },
            color:{ // 标题和左侧按钮颜色(默认白色)
                type:String,
                default:'#fff'
            },
            iconSize: { // 左侧图标尺寸
                type: String,
                default: '24'
            },
            iconType: { // 左侧图标类型
                type: String,
                default: 'back'
            },
               //建议使用background  因为使用backgroundColor,会导致不识别渐变颜色
            background:{ // 背景颜色(不传值默认透明)
                type:String,
                default:'transparent'
            },
            back:{ // 是否显示返回按钮(不传值默认不显示)
                type: Boolean,
                default: false
            }
           },
            data() {
                return {
                    // height: 0, 
                    // paddingTop: 0,
                }
            },
            computed: {
                
                /* 微信小程序胶囊高度,即顶部导航高度 */
                height() {
                    return this.$store.getters.phoneInfo.height
                },
                /* 微信小程序胶囊距离顶部边距,即顶部导航上方的区域 */
                paddingTop(){
                    return this.$store.getters.phoneInfo.paddingTop
                }
            },
            created() {
            },
            methods: {
                /**
                 * 左侧按钮触发,目前默认返回上一页
                 */
                onBack() {
                    uni.navigateBack();
                }
            }
        }
</script>
​
<style lang="scss" scoped>
  .top-content {
      position: fixed;
      top: 0%;
      width: 100%;
      z-index: 99;
      padding-bottom: 10rpx;
      .demo {
          margin: 0 20rpx;
          display: flex;
          align-items: center;
          justify-content: center;
          box-sizing: border-box;
            .item{
                width: 20%;
                display: flex;
                align-items: center;
            }
            .m-item{
                width: 60%;
                text-align: center;
                font-weight: 500;
                color: #FFFFFF;
            }
        }
  }
</style>

页面使用

例: index.vue(首页)

<template>
    <view>
        <!-- 自定义顶部 -->
        <top-nav back color="#fff6fa" title="我的"></top-nav>
        
        <view :style="{paddingTop}">
            <view class="box">
                我是内容区
            </view>
        </view>
​
    </view>
</template>
​
<script>
    export default {
        data() {
            return {
                
            }
        },
        computed: {
            paddingTop(){
                return this.$store.getters.phoneInfo.topNavHeight * this.$store.getters.phoneInfo.proportion + 'rpx'
            }
        },
        mounted() {
            
        },
        methods: {
        }
    }
</script>
​
<style scoped lang="scss">
    .box{
        width: 100%;
        height: 200rpx;
        display: flex;
        justify-content: center;
        align-items: center;
        background-color: #118a84;
    }
</style>

效果:

uniapp 自定义顶部导航,uniapp微信小程序,javascript,前端,uni-app,微信小程序

基本实现就这些了, 希望可以帮助到你.
不喜勿喷 ! 记得点赞哦! 我是坐井观天阔的小青蛙

转载请说明出处! 文章来源地址https://www.toymoban.com/news/detail-742414.html

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

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

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

相关文章

  • uni-app自定义微信小程序头部导航栏

    目录 一、子组件代码 1、完整子组件代码  2、子组件配置项Props  二、父组件引用代码  1 、将头部导航注册成全局组件(main.js) 2、获取设备信息(App.vue) 3、页面导入自定义导航组件 (3-1)、默认配置效果图例 (3-2)、更改配置效果图例  1、完整子组件代码  2、子组件

    2024年02月03日
    浏览(56)
  • uni-app 微信小程序之自定义中间圆形tabbar

    首先在 pages.json 文件中,新建一个 tabbar 页面 此页面主要是写 tabbar的html样式和布局,引用主页面代码,通过 v-if 控制进行展示 index , search , maim , news , me 一级页面 css 样式文件太多了就不贴出来了

    2024年02月03日
    浏览(59)
  • uni-app(微信小程序)自定义日期选择器和时间选择器,解决IOS端和安卓端显示不同问题

    原本用的原生组件picker,设置了开始时间和结束时间,安卓端可以显示可选日期时间部分,但是IOS显示的内容包括一整天时间和N个年,本来只需要选择其中七天,那么其他天不显示,IOS端可以滑到其他日期位置,但是会自己滚回来 IOS端: 安卓: 这里只需要八点后和19点前(

    2024年02月16日
    浏览(82)
  • 微信小程序uni-app

    小程序 是一种不需要下载、安装即可使用的应用,它实现了应用触手可及的梦想,用户扫一扫或者搜一下就能打开应用,也实现了用完即走的理念,用户不用安装太多应用,应用随处可用,但又无须安装卸载。 微信开发文档 1、工作原理 网页开发,渲染线程和脚本是互斥的

    2024年02月10日
    浏览(119)
  • 语法速通 uni-app随笔【uni-app】【微信小程序】【vue】

    其中, pages 目录/ index 目录【必有】: index.js 编写业务逻辑 【初始数据,生命周期函数】 index.json 编写配置 index.wxml 编写模板 【可理解为本页html】 index.wxss 【可理解为本页css】 直接输入敲回车,连尖括号都不需要就可以标签补全 1)初始数据写死 在 index.wxml 引入变

    2024年02月12日
    浏览(165)
  • 微信小程序授权(uni-app)

    概述 为了避免重复开发,自己封装了一个通用用户授权回调方法,只需要传入需要授权的scope,权限中文描述、回调函数,就可以实现一整套小程序是否授权、打开授权设置,调用后续操作函数的工作 功能 可以根据自己的实际应用进行微调 目前使用的uni-app版本,可以根据自

    2024年02月16日
    浏览(80)
  • uni-app微信小程序使用echarts

    前言:本来是使用的ucharts,但因为无法监听图例点击交互,满足不了需求,所以只能放弃。 首先,下载echart组件。可以先随便建个文件夹,然后 npm init。接着下载依赖 然后找到 node_modulesmpvue-echarts下的文件,如图 只留下src,其他的删掉(没有用到)。然后复制 mpvue-echart

    2024年02月10日
    浏览(68)
  • uni-app 微信小程序 激励视频广告

    封装激励视频-Ad.js 调用上面写的方法:

    2024年02月12日
    浏览(76)
  • 【uni-app微信小程序】实现支付功能

    实现微信支付功能需要在小程序后台配置支付相关信息,并且在前端代码中调用微信支付API进行支付操作。好的, uni-app微信小程序实现支付功能整体流程 大致如下: 注册微信公众平台,并完成开发者资质认证; 在微信商户平台注册商户账号,并完成商户资质认证; 在商户

    2024年02月13日
    浏览(95)
  • uni-app:vue3 + uni-app 在微信小程序中无法使用app.component全局注册组件

    按上文中的代码执行后,会发现在微信小程序开发中全局注册的组件是无法显示的,这是uniapp的一个未解决bug, 在uniapp中出了可以通过vue实例的component方法注册全局组件外,uniapp支持另一种全局注册的方式,就是通过 easycom 扫描注册,步骤如下 easycom 的扫描流程是:通过代码

    2024年02月16日
    浏览(91)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包