vue3 uniapp h5 安卓和iOS开发适配踩坑记录

在这里插入图片描述

font-size适配屏幕大小及iOS和安卓状态栏及安全距离的处理

在这里插入图片描述
在这里插入图片描述
App.vue

<script setup lang="ts">
import { onLaunch, onShow, onHide } from "@dcloudio/uni-app";
import './main.scss'
onLaunch(() => {
  console.log("App Launch");
  var  width = document.documentElement.clientWidth;
  const fontSize = width / 750 + 'px';
  // 这样写是不生效的h5编译运行的文件是有默认的style样式的
  // 一个标签上不能同时出现两个style,不符合编译原则
  // document.documentElement.style.fontSize = fontSize;

  // 解决方法
  // 1. 利用html的默认style来实现
  // 2. 在html上添加--gobal-font-size(注意-gobal-font-size变量仅适用于css文件),设置文字的大小
        // 1. 在  static 文件夹下创建 css/public.css 文件
        // 2. 在 main.ts 文件中引入 public.css (import './static/css/public.css';)
    document.documentElement.className = 'gobal-font-size';
  // 3. 然后将设置文字大小的类添加到html标签上
    document.documentElement.style.setProperty("--gobal-font-size", fontSize);

  // 处理系统不同兼容性问题
  uni.getSystemInfo({
      success: function (res) {
          const statusBarHeight = res.statusBarHeight;
          document.documentElement.style.setProperty("--statusBarHeight", statusBarHeight + 'px');
          console.log('状态栏的高度', statusBarHeight)

          if (res.platform === "android") {
            document.body.classList.add('android');
          } else if (res.platform === "ios") {
            document.body.classList.add('ios');

            // 处理安全区域的距离
            const safeArea = res.safeArea;
            const bottomDistance = res.screenHeight - safeArea.bottom;
            document.documentElement.style.setProperty("--safe-area", bottomDistance + 'px');
            console.log('底部安全区域距离:', bottomDistance);

          } else {
            document.body.classList.add('other');
          }
      }
  })
});
onShow(() => {
  console.log("App Show");
});
onHide(() => {
  console.log("App Hide");
});
</script>
<style>
@import "@/static/fonts/iconfont.css";
</style>

public.css

html {
    --gobal-font-size: 0.45px;
    /*状态栏的高度*/
    --statusBarHeight: 44px;
    /*在竖屏正方向下的安全区域*/
    --safe-area: 34px;
}
.gobal-font-size {
    font-size: var(--gobal-font-size) !important;
}

#app {
    padding-bottom: var(--safe-area);
}

/* 安卓兼容性单独处理*/
.android {
    /* 处理状态栏的间距 */
    padding-top: var(--statusBarHeight);
}
/* ios兼容性单独处理*/
.ios {
    /* 处理状态栏的间距 */
    padding-top: var(--statusBarHeight);
}
/* 其它兼容性单独处理*/
.other {

}

记得在main.ts中引入public.css哟~
在这里插入图片描述
提醒:
能做全局的就千万不要单独写,后续维护是个麻烦。

iOS position:fixed失效

iOS的position: fixed是根据距离最近的scroll来定位的, 如果自定义弹窗是通过position: fixed来实现的,就不要在scroll-view里面调用,可以通过自定义样式(overflow: auto)来实现滚动。
在这里插入图片描述

calc 100vh 计算高度

最好不要使用height: calc(100vh - 44px)这种方式来计算高度,系统不一样,高度的计算方法也不一样,iOS有时候没问题,安卓会莫名的出现滚动条。

body 上使用 padding-top: env(safe-area-inset-top)

只针对主页有用,对tabbar页面无效,tabbar页面要单独处理。

页面设置100vh高度后Android会出现滚动条(body上添加padding处理状态栏的距离后出现的问题)

解决方法:

body {
	box-sizing: border-box;
}

在安卓上浏览器会将body元素的宽高设置为视口的宽高,并将任何添加到body元素上的padding会增加在总宽高上面,就会出现滚动条。

pinyin包实现省市区的选择

使用pinyin-pro包比pinyin包小
在这里插入图片描述
在这里插入图片描述
实现方法:

  1. 调用接口查看省市区的数据
  2. 处理省市区的数据
import {pinyin} from 'pinyin-pro';
// 声明变量存储处理的数据
let list = [];
// 数据处理
if (res.data?.length > 0) {
	res.data?.map(item => {
		// 将中文字符串转换成拼音数组
		const pinyinArray = pinyin(item?.name, {
			// 设置拼音首字母的风格
			style: pinyin.STYLE_FIRST_LETTER
		})
		// 获取拼音数组的第一个字母(这里有些多音字翻译的不准确要单独处理)
		const firstLetter = pinyinArray[0][0];
		// 将获取的第一个字母转换成大写字母
		const upFont = firstLetter.toUpperCase();
		// 判断拼音数组的第一个字母是否存在在list中
		const listIndex = list.findIndex(i => i?.letter === upFont);
		if (listIndex > 0) {
			// 相同首字母的数据合并在一起
			list[listIndex].data = [item, ...list[listIndex].data];
		} else {
			list.push({
				letter: upFont,
				data: [item]
			})
		}
	})
}
// 将处理过的数据从小到大排列
const sortList = list.sort((a, b) => {
	return a.letter.localeCompare(b.letter);
})

手机号实现344格式

在这里插入图片描述
注意:必须用input才能实现时候号码格式化。

<input v-model="mobileText" @input="mobileChange"/>
<div class="clear" v-if="mobileText.length > 0"></div>

mobileChange() {
	// 手机号码
	this.mobile = e.detail.value.replace(/[^0-9_]/g, '');
	// 页面显示的数据
	this.mobileText = this.mobile;
	// 实现344格式
	if (this.mobileText.length > 3 && this.mobileText.length < 8) {
		this.mobileText = this.mobileText.replace(/^(\d{3})/g, '$1 ');
	} else if this.mobileClear.length > 7) {
		this.mobileText = this.mobileText.replace(/^(\d{3})(\d{4})/g, '$1 $2 ')
	}
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

leetcode刷题详解——粉刷房子

1. 题目链接&#xff1a;LCR 091. 粉刷房子 2. 题目描述&#xff1a; 假如有一排房子&#xff0c;共 n 个&#xff0c;每个房子可以被粉刷成红色、蓝色或者绿色这三种颜色中的一种&#xff0c;你需要粉刷所有的房子并且使其相邻的两个房子颜色不能相同。 当然&#xff0c;因为…

六大排序详讲(直接插入排序+希尔排序+选择排序+堆排序+冒泡排序+快速排序)

文章目录 排序一、 排序的概念1.排序&#xff1a;2.稳定性&#xff1a;3.内部排序&#xff1a;4.外部排序&#xff1a; 二、插入排序1.直接插入排序2.希尔排序 三、选择排序1.直接选择排序方法一方法二直接插入排序和直接排序的区别 2.堆排序 四、交换排序1.冒泡排序2.快速排序…

Threejs_07 环境、透明度、纹理、ao、光照等贴图的渲染

老陈打码 继续学习老陈threejs 支持&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 下面用到的所有图片、资源、hdr文件都是老陈打码的原资源 链接&#xff1a;https://pan.baidu.com/s/1WWWHgekCIH7OnjI7S_3ZtQ 提取码&#xff1a;6666 Thre…

新建模板,或组件自适应

1&#xff0c;***一定要改为固定布局&#xff08;才可以自适应&#xff09; 2&#xff0c; 3&#xff0c; 4&#xff0c;系统序号“1”就是第一根柱 5&#xff0c;系列-自动-配色这里1就是第一根柱颜色&#xff0c;2..... 6&#xff0c;坐标柱 标红的去掉&#xff0c;在那里设…

debian10 开启rdp安装firefox并解决firefox 中文乱码

debian10 开启rdp安装firefox apt -y install tigervnc-standalone-server apt -y install xrdp tigervnc-standalone-server systemctl enable xrdp --nowapt install firefox-esrmstsc连接 firefox-settings-general-fonts-advanced-Simplified Chinese

【vue+eltable】修改表格滚动条样式

<style lang"scss" scoped> ::v-deep .el-table__body-wrapper::-webkit-scrollbar {width: 10px; /*纵向滚动条的宽度*/height: 10px; /*横向滚动条的高度*/ } /*定义滚动条轨道 内阴影圆角*/ ::v-deep .el-table__body-wrapper::-webkit-scrollbar-track {bo…

以太网_底层

【实物图】 【网线接口】 MAC(媒体访问控制器)&#xff1a;控制数据的收发和管理&#xff0c;和用户层打交到&#xff1b;通过MII/RMII、SMI接口和PHY进行通信。 PHY(以太网物理层收发器)&#xff1a;中间体&#xff0c;负责收发信号的转换 常见PHY芯片有&#xff1a;LAN8720…

Docker上部署mysql(超简单!!!)

拉取mysql镜像 运行如下命令 docker pull mysql:5.7 拉取成功 查看镜像 运行容器 此处部署最新版本的mysql docker run -d --name mysql -p 3307:3306 -e TZAsia/Shanghai -e MYSQL_ROOT_PASSWORD111 mysql --name mysql&#xff1a;给容器起个名字&#xff08;唯一&#xff…

按照指定条件对数据进行分组并对每个分组内的全部数据应用自定义函数进行聚合计算groupby().apply()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 按照指定条件对数据进行分组 并对每个分组内的全部数据 应用自定义函数进行聚合计算 groupby().apply() [太阳]选择题 下列输出正确的是&#xff1a; import pandas as pd data {Name: [A, B,…

Spring Cloud实战 |分布式系统的流量控制、熔断降级组件Sentinel如何使用

专栏集锦&#xff0c;大佬们可以收藏以备不时之需 Spring Cloud实战专栏&#xff1a;https://blog.csdn.net/superdangbo/category_9270827.html Python 实战专栏&#xff1a;https://blog.csdn.net/superdangbo/category_9271194.html Logback 详解专栏&#xff1a;https:/…

深度解析Python Melt函数的妙用技巧

更多Python学习内容&#xff1a;ipengtao.com 大家好&#xff0c;我是涛哥&#xff0c;今天为大家分享 Python Melt函数的妙用技巧&#xff0c;文章4200字&#xff0c;阅读大约15分钟&#xff0c;大家enjoy~~ 在数据处理和清洗中&#xff0c;melt函数是Pandas库中一个强大而灵活…

squid代理服务器(传统代理、透明代理、反向代理、ACL、日志分析)

一、Squid 代理服务器 &#xff08;一&#xff09;代理的工作机制 1、代替客户机向网站请求数据&#xff0c;从而可以隐藏用户的真实IP地址。 2、将获得的网页数据&#xff08;静态 Web 元素&#xff09;保存到缓存中并发送给客户机&#xff0c;以便下次请求相同的数据时快速…

抖音本地生活服务商申请怎么做?无保证金的申请方法来了

想做抖音的本地生活服务项目&#xff0c;却不知道去哪里申请&#xff0c;或者如何申请&#xff0c;其实&#xff0c;官方的通道在今年上半年还是有的&#xff0c;自己去平台上提交资料申请就可以了&#xff0c;但需要缴纳高额的保证金。 而在今年下半年&#xff0c;平台已经关…

从0开始学习JavaScript--深入理解JavaScript的async/await

JavaScript的异步编程在过去经历了回调地狱、Promise的引入&#xff0c;而今&#xff0c;通过async/await&#xff0c;让我们获得了更加优雅、可读性更高的异步编程方式。本文将深入探讨async/await的概念、用法&#xff0c;并通过丰富的示例代码展示其在实际应用中的威力。 理…

Linux安装ErLang(亲测可用)

注&#xff08;我这里安装完成后显示的是中文&#xff0c;有的是显示的英文&#xff09; 1.下载er wget https://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm2.安装er yum -y install epel-release截图截不全&#xff0c;就只截安装完成的部分了 rp…

在银行外包如何自我提升

作者&#xff1a;苍何&#xff0c;前大厂高级 Java 工程师&#xff0c;阿里云专家博主&#xff0c;CSDN 2023 年 实力新星&#xff0c;土木转码&#xff0c;现任部门技术 leader&#xff0c;专注于互联网技术分享&#xff0c;职场经验分享。 &#x1f525;热门文章推荐&#xf…

基于单片机公交安全预警系统仿真设计

**单片机设计介绍&#xff0c; 基于单片机公交安全预警系统仿真设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的公交安全预警系统可以被设计成能够实时监测公交车辆的行驶状态&#xff0c;并在发生异常情况时进行…

使用Pytorch实现linear_regression

使用Pytorch实现线性回归 # import necessary packages import torch import torch.nn as nn import numpy as np import matplotlib.pyplot as plt# Set necessary Hyper-parameters. input_size 1 output_size 1 num_epochs 60 learning_rate 0.001# Define a Toy datas…

GB28181视频监控国标平台EasyGBS如何进行服务迁移?

视频流媒体安防监控国标GB28181平台EasyGBS视频能力丰富&#xff0c;部署灵活&#xff0c;既能作为业务平台使用&#xff0c;也能作为安防监控视频能力层被业务管理平台调用。国标GB28181视频EasyGBS平台可提供流媒体接入、处理、转发等服务&#xff0c;支持内网、公网的安防视…

直播岗位认知篇

一、直播岗位概述 直播岗位&#xff0c;也称为直播主播或直播运营&#xff0c;是指在互联网直播平台上进行直播活动的工作岗位。该岗位的主要职责是通过直播形式&#xff0c;向观众展示自己的才艺、分享生活、销售产品或服务&#xff0c;并引导观众互动和参与。直播主播需要具…