微信小程序第一节 —— 自定义顶部、底部导航栏以及获取胶囊体位置信息。

news2024/11/26 18:27:04

一、前言

大家好!我是 是江迪呀。我们在进行微信小程序开发时,常常需要自定义一些东西,比如自定义顶部导航自定义底部导航等等。那么知道这些自定义内容的具体位置、以及如何适配不同的机型就变得尤为重要。下面让我以在iPhone机型,来给大家介绍下微信小程序如何获取自定义内容的位置信息。

二、开启自定义

如果需要自定义顶部和底部导航。那么如何在自定义后能够适配不同的机型而不会出现样式问题呢?我们可以通过wx.getSystemInfo({})方法来获取页面的信息来保证样式的正确性。此方法常用于app.js文件中的onLanch()方法中,保证这些信息优先被加载,并把获取到的页面信息放到全局变量中,方便其他页面的获取使用。

在此之前需要开启自定义顶部和底部导航栏。如下所示:

{
  "pages": [
    "pages/index/index",
    "pages/index2/index2" 
  ],
  //自定义顶部导航 "navigationStyle": "custom",
  "window": {
    "navigationStyle": "custom",
    "navigationBarTextStyle": "white",
    "backgroundTextStyle": "light"
  },
  //自定义底部导航 "navigationStyle": "custom",这里注意在设置自定义底部导航栏时,list中至少包含两个页面
  "tabBar": {
    "custom": true,
    "list": [
      {
        "pagePath": "pages/index/index",
        "text": "首页"
      },
      {
        "pagePath": "pages/index2/index2",
        "text": "首页2"
      }
    ]
  },
  "style": "v2",
  "sitemapLocation": "sitemap.json"
}

2.1 整个页面

1.位置

在这里插入图片描述

2.如何获取

页面代码:

<view style="height: {{screenHeight}}px;background-color: aliceblue;">
</view>

页面js代码:

const app = getApp()
Page({
  data: {
    screenHeight: app.globalData.screenHeight,
  }
})

app.js文件代码:


    onLaunch: function() {
        wx.getSystemInfo({
            success: e => {
            	//获取整个页面的高度
                this.globalData.screenHeight = e.screenHeight;
              }
             },
        )}

2.1 状态栏

1.位置

状态栏就是手机最顶部显示时间信号电量等信息的区域。一般状态栏的信息我们不单独获取设置,因为顶部导航栏包含了状态栏
在这里插入图片描述

2.如何获取

页面代码:

<!--index.wxml-->
<view style="height: {{screenHeight}}px;background-color: aliceblue;">
  <!--状态栏高度-->
  <view style="height: {{statusBarHeight}}px;background-color: red;"></view>
</view>

页面js代码:

// index.js
const app = getApp()
Page({
  data: {
    screenHeight: app.globalData.screenHeight,
    statusBarHeight: app.globalData.statusBarHeight
  }
})

app.js文件代码:

    onLaunch: function() {
	     wx.getSystemInfo({
           success: e => {
              this.globalData.screenHeight = e.screenHeight;
              //获取状态栏的高度
              this.globalData.StatusBar = e.statusBarHeight;
           }
	     },
	)}

2.2 顶部导航栏

1.位置

顶部导航栏的高度是包含胶囊体的。
在这里插入图片描述

2.如何获取

首先获取胶囊体的信息,如果不存在胶囊体,顶部导航栏高度 = 状态栏高度 + 50;如果存在顶部导航栏高度 = 胶囊体离页面顶部的距离 + 胶囊体离页面底部的距离 - 状态栏高度
页面代码:

<view style="height: {{screenHeight}}px;background-color: aliceblue;">
  <!--顶部导航高度-->
  <view style="height: {{customBar}}px;background-color: blue;"></view>
</view>

页面js代码:

const app = getApp()
Page({
  data: {
    screenHeight: app.globalData.screenHeight,
    customBar: app.globalData.CustomBar
  }
})

app.js代码:

// app.js
App({
  globalData:{
  },
  onLaunch: function() {
    wx.getSystemInfo({
    success: e => {
        let capsule = wx.getMenuButtonBoundingClientRect();
        if (capsule) {
          this.globalData.Custom = capsule;
          this.globalData.CustomBar = capsule.bottom + capsule.top - e.statusBarHeight;
        } else {
          this.globalData.CustomBar = e.statusBarHeight + 50;
        }
      }
     },
 )}
})

2.4 内容区域

1.位置

如果你做的小程序没有底部导航栏的话,那么内容区域 = 页面总高度 - 顶部导航栏高度
在这里插入图片描述
但是如果你需要底部导航的话那么内容区域 = 页面总高度 - 顶部导航栏高度 - 底部导航栏高度
在这里插入图片描述

2.如何获取

页面代码:

  <view style="height:{{screenHeight}}px;width: 100%;background-color: rgb(255, 255, 255);">
    <!--顶部导航栏-->
    <view class="" style="height: {{CustomBar}}px;background-color: blue;"></view>
    <!--内容区域-->
    <view class="" style="height: {{screenHeight - CustomBar}}px;background-color: black;"></view>
    <!--内容区域 包含底部导航-->
    <view class="" style="height: {{screenHeight - CustomBar - tabBarHeight}}px;background-color: black;"></view>
  </view>

页面js代码:

const app = getApp()
Page({
  data: {
    screenHeight: app.globalData.screenHeight,
    CustomBar: app.globalData.CustomBar,
    tabBarHeight: app.globalData.tabBarHeight,
  }
})

app.js代码:

// app.js
App({
  globalData:{
    
  },
  onLaunch: function() {
    // 获取系统状态栏信息
    wx.getSystemInfo({
    success: e => {
        this.globalData.screenHeight = e.screenHeight;
        this.globalData.tabBarHeight = e.screenHeight - e.safeArea.bottom + 50
        let capsule = wx.getMenuButtonBoundingClientRect();
        if (capsule) {
          this.globalData.CustomBar = capsule.bottom + capsule.top - e.statusBarHeight;
        } else {
          this.globalData.CustomBar = e.statusBarHeight + 50;
        }
      }
     },
 )}
})

2.3 底部导航栏

1.位置

在这里插入图片描述

2.如何获取

页面代码:

<view style="height: {{screenHeight}}px;background-color: aliceblue;">
  <!--顶部导航高度-->
  <view style="height: {{customBar}}px;background-color: blue;"></view>
  <!--内容高度 包含底部导航-->
  <view style="height: {{screenHeight - customBar - tabBar}}px;background-color: black;"></view>
  <!--底部导航高度-->
  <view style="height: {{tabBarHeight}}px;background-color: red;"></view>
</view>

页面js代码:

const app = getApp()
Page({
  data: {
    screenHeight: app.globalData.screenHeight,
    statusBarHeight: app.globalData.statusBarHeight,
    customBar: app.globalData.CustomBar,
    tabBar: app.globalData.tabBarHeight,
    tabBarHeight: app.globalData.tabBarHeight
  }
})

app.js代码:

    onLaunch: function() {
        wx.getSystemInfo({
            success: e => {
            	this.globalData.screenHeight = e.screenHeight;
            	this.globalData.tabBarHeight = e.screenHeight-e.safeArea.bottom + 50
				let capsule = wx.getMenuButtonBoundingClientRect();
		        if (capsule) {
		          this.globalData.Custom = capsule;
		          this.globalData.CustomBar = capsule.bottom + capsule.top - e.statusBarHeight;
		        } else {
		          this.globalData.CustomBar = e.statusBarHeight + 50;
		        }
              }
             },
        )}

这个底部导航栏之所以+50,我是从小程序框架中获取的,可以直接拿来用。

三、胶囊体

3.1 什么是胶囊体?

在这里插入图片描述

我们再做自定义顶部导航时,在一些场景下需要在导航中设置返回按钮以及其他信息:
在这里插入图片描述
这些按钮和信息需要和胶囊体对齐才完美,所以我们需要获取到胶囊体的位置信息。

3.2 如何获取?

// app.js
App({
  globalData:{
  },
  onLaunch: function() {
    // 获取系统状态栏信息
    wx.getSystemInfo({
    success: e => {
      	//胶囊体距离顶部距离
        this.globalData.capsuleTop =  wx.getMenuButtonBoundingClientRect().top;
        //胶囊体的高度
        this.globalData.capsuleHeight =  wx.getMenuButtonBoundingClientRect().height;
        //胶囊体的宽度
        this.globalData.capsuleWidth =  wx.getMenuButtonBoundingClientRect().width;
      }
     },
     wx.onKeyboardHeightChange((res) => {
      console.log('键盘高度111111:', res.height)
      wx.setStorageSync('keyBordHeight', res.height)
    })
 )}
})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/384715.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Word处理控件Aspose.Words功能演示:使用 C# 拆分 MS Word 文档

Aspose.Words 是一种高级Word文档处理API&#xff0c;用于执行各种文档管理和操作任务。API支持生成&#xff0c;修改&#xff0c;转换&#xff0c;呈现和打印文档&#xff0c;而无需在跨平台应用程序中直接使用Microsoft Word。此外&#xff0c; Aspose API支持流行文件格式处…

Python——列表排序和赋值

&#xff08;1&#xff09;列表排序&#xff1a; 列表排序方法 ls.sort() 对列表ls 中的数据在原地进行排序 ls [13, 5, 73, 4, 9] ls.sort()ls.sort(reverseFalse) 默认升序&#xff0c;reverseTrue&#xff0c;降序 ls [13, 5, 73, 4, 9] ls.sort(reverseTrue)key指定排序时…

小红书「高效达人筛选攻略」

三八女神节降临&#xff0c;诸多品牌纷纷开启铺垫预热&#xff0c;在各大平台借势宣传。而聚集庞大年轻女性消费群体的小红书&#xff0c;对“她营销”的重要性不言而喻。节点序幕拉开&#xff0c;面对海量达人信息&#xff0c;如何提前积草屯粮、高效备战&#xff1f; 本期千瓜…

【数据结构】链表:看我如何顺藤摸瓜

&#x1f451;专栏内容&#xff1a;数据结构⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;日拱一卒&#xff0c;功不唐捐 文章目录一、前言二、链表1、定义2、单链表Ⅰ、新建一个节点Ⅱ、内存泄漏Ⅲ、插入一个节点Ⅳ、销毁所有节点Ⅴ、反转一个链表3、…

云his系统源码 SaaS应用 基于Angular+Nginx+Java+Spring开发

云his系统源码 SaaS应用 功能易扩 统一对外接口管理 一、系统概述&#xff1a; 本套云HIS系统采用主流成熟技术开发&#xff0c;软件结构简洁、代码规范易阅读&#xff0c;SaaS应用&#xff0c;全浏览器访问前后端分离&#xff0c;多服务协同&#xff0c;服务可拆分&#xff…

【Linux要笑着学】进程创建 | 进程终止 | slab分派器

爆笑教程《看表情包学Linux》&#x1f448; 猛戳订阅&#xff01;​​​​​​​​​​​​&#x1f4ad; 写在前面&#xff1a;本章我们主要讲解进程的创建与终止。首先讲解进程创建&#xff0c;fork 函数是我们早在讲解 "进程的概念" 章节就提到过的一个函数&#…

总结篇 字符串设备(一)

简介 1、字符设备是Linux驱动中最基本的一类设备驱动&#xff0c;字符设备就是一个个字节&#xff0c;按照字节流进行读写操作的设备。&#xff08;例&#xff1a;按键&#xff0c;电池等&#xff0c;IIC,SPI&#xff0c;LCD&#xff09;。这些设备的驱动就叫字符设备驱动。 在…

八股文(二)

一、 实现深拷贝和浅拷贝 1.深拷贝 function checkType(any) {return Object.prototype.toString.call(any).slice(8, -1) }//判断拷贝的要进行深拷贝的是数组还是对象&#xff0c;是数组的话进行数组拷贝&#xff0c;对象的话进行对象拷贝 //如果获得的数据是可遍历的&#…

小白推荐!必定成功的python的安装流程?

目录 1.安装教程 2.使用cmd测试是否安装成功&#xff0c;快捷键WinR 3.如果测试失败&#xff0c;如何卸载&#xff1f; 4.如何在pycharm中指定下载的python解释器路径&#xff1f; 5.第一条python语句 1.安装教程 1.前往python的官网&#xff08;弄个梯子可能会快一点&#xf…

spring boot + rabbitMq整合之死信队列(DL)

rabbit mq 死信队列 什么是死信队列? DL-Dead Letter 死信队列 死信&#xff0c;在官网中对应的单词为“Dead Letter”&#xff0c;可以看出翻译确实非常的简单粗暴。那么死信是个什么东西呢&#xff1f; “死信”是RabbitMQ中的一种消息机制&#xff0c;当你在消费消息时&…

Qt 解决程序全屏运行弹窗引发任务栏显示

文章目录摘要在VM虚拟机器中测试setWindowFlags()关键字&#xff1a; Qt、 Qt::WindowStayOnTopHint、 setWindowFlags、 Qt::Window、 Qt::Tool摘要 今天眼看项目就要交付了&#xff0c;结果在测试程序的时候&#xff0c;发现在程序全品情况下&#xff0c;点击输入框&#x…

【Android Studio】【学习笔记】【2023春】

文章目录零、常用一、界面布局疑问&报错零、常用 一、界面布局 Android——六大基本布局总结/CSDN小马 同学 【Android】线性布局&#xff08;LinearLayout&#xff09;最全解析/CSDNTeacher.Hu 一个不错的计算器界面&#x1f447; Android Studio App LinearLayout多层…

数据资产管理建设思考(二)

关于数据资产管理&#xff0c;近两年是数据治理行业中一个热点话题&#xff0c;当然有我们前面提到的国家的政策支持及方向指引的原因。另一方面我们做数据治理的同行们从学习吸收国外优秀的数据治理理论&#xff0c;进一步在实践中思考如何应用理论&#xff0c;并结合我们国家…

docker(二)镜像详解、镜像构建、镜像优化

文章目录前言一、docker镜像详解1.镜像分层结构2.镜像的表示二、镜像构建1.commit提交2.DockerfileDockerfile 命令详解三、镜像优化1.缩减镜像层2.多阶段构建3.使用最精简的基础镜像前言 一、docker镜像详解 1.镜像分层结构 共享宿主机的kernelbase镜像提供的是最小的Linux发…

【LeetCode】1487. 保证文件名唯一

1487. 保证文件名唯一 题目描述 给你一个长度为 n 的字符串数组 names 。你将会在文件系统中创建 n 个文件夹&#xff1a;在第 i 分钟&#xff0c;新建名为 names[i] 的文件夹。 由于两个文件 不能 共享相同的文件名&#xff0c;因此如果新建文件夹使用的文件名已经被占用&a…

pytorch-模型训练中过拟合和欠拟合问题。从模型复杂度和数据集大小排查问题

评价了机器学习模型在训练数据集和测试数据集上的表现。如果你改变过实验中的模型结构或者超参数&#xff0c;你也许发现了&#xff1a;当模型在训练数据集上更准确时&#xff0c;它在测试数据集上却不一定更准确。这是为什么呢&#xff1f; 训练误差和泛化误差 在解释上述现象…

常用Swagger注解汇总

常用Swagger注解汇总 前言 在实际编写后端代码的过程中&#xff0c;我们可能经常使用到 swagger 注解&#xff0c;但是会用不代表了解&#xff0c;你知道每个注解都有什么属性吗&#xff1f;你都用过这些属性吗&#xff1f;了解它们的作用吗&#xff1f;本文在此带大家总结一下…

6-2 SpringCloud快速开发入门:声明式服务消费 Feign实现消费者

声明式服务消费 Feign实现消费者 使用 Feign实现消费者&#xff0c;我们通过下面步骤进行&#xff1a; 第一步&#xff1a;创建普通 Spring Boot工程 第二步&#xff1a;添加依赖 <dependencies><!--SpringCloud 集成 eureka 客户端的起步依赖--><dependency>…

图解LeetCode——剑指 Offer 34. 二叉树中和为某一值的路径

一、题目 给你二叉树的根节点 root 和一个整数目标和 targetSum &#xff0c;找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。叶子节点 是指没有子节点的节点。 二、示例 2.1> 示例 1&#xff1a; 【输入】root [5,4,8,11,null,13,4,7,2,null,null,5,1], t…

从 ChatGPT 爆火回溯 NLP 技术

ChatGPT 火遍了全网&#xff0c;多个话题频频登上热搜。见证了自然语言处理&#xff08;NLP&#xff09;技术的重大突破&#xff0c;体验到通用技术的无限魅力。GPT 模型是一种 NLP 模型&#xff0c;使用多层变换器&#xff08;Transformer&#xff09;来预测下一个单词的概率分…