当前位置: 首页 > news >正文

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 ')}
}

相关文章:

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 wid…...

inf和nan

在某些编程语法中inf表示无穷大,nan表示不是一个数(not a number) nan表示这个数不确定,而无穷大表示这个数任意大 1/0inf 这里把0当做一个无限接近0,但是非0的数 5-inf-inf 一个数减去无穷大会等于负无穷大 而inf-infnan 因为两个无穷大相减有很多可能,可能等于一个常数,也可能…...

十. Linux关机重启命令与Vim编辑的使用

关机重启命令 shutdown命令 其他关机命令 其他重启命令 系统运行级别 系统默认运行级别与查询 退出登录命令logout 文本编辑器Vim Vim简介 没有菜单,只有命令Vim工作模式 Vim常用命令 插入命令 定位命令 删除命令 复制和剪切命令 替换和取消命令 搜索和搜索替换命令 保存和退出…...

Spring-IOC-@Value和@PropertySource用法

1、Book.java PropertySource(value"classpath:配置文件地址") 替代 <context:property-placeholder location"配置文件地址"/> Value("${book.bid}") Value("${book.bname}") Value("${book.price}") <bean id&…...

如何理解Python中一切皆对象?

Python 一、示例代码二、Python中的魔法方法 一、示例代码 有理数类 import mathclass rational:def __init__(self,p,q):self.p pself.q qdef __str__(self):return "{} / {}".format(self.p,self.q)def simplify(self):gcd math.gcd(self.p,self.q)return rat…...

【如何学习Python自动化测试】—— 鼠标键盘操作

5 、 鼠标键盘操作 在浏览器中&#xff0c;通常会用到鼠标来进行操作&#xff0c;比如右键菜单中选择一个操作&#xff0c;在 selenium 中提供了下列鼠标相关操作。 ActionChains 类提供了以下方法&#xff1a; 点击鼠标&#xff1a;click()右击鼠标&#xff1a;context…...

随笔-事儿就这么个事儿

好久没写了&#xff0c;小A要催更&#xff0c;还答应让我写一下他的经历&#xff0c;这还有啥说的&#xff0c;开整。 1、升级 前段时间登录公司的办公系统处理一个事务申请&#xff0c;发现有个粗体标红的通知&#xff0c;是关于今年的晋升名单公示。进去看了一眼&#xff0…...

django理解03 数据库引入

配置 settings.py DATABASES {"default": {"ENGINE": "django.db.backends.mysql",NAME:307_django_db,USER: root,PASSWORD: 123456,HOST: 127.0.0.1,PORT: 3306,} }先创建指定名称的数据库databases create database self_django_db DEFAUL…...

Jtti:windows中apache怎么实现负载均衡

Jtti&#xff1a;windows中apache怎么实现负载均衡 在Windows环境下&#xff0c;你可以使用Apache HTTP Server搭建负载均衡集群。Apache提供了一个模块叫做mod_proxy&#xff0c;它可以用来实现反向代理和负载均衡。以下是一个简单的步骤来配置Apache负载均衡&#xff1a; 步骤…...

2311rust,到43版本更新

1.38.0 流水编译 要编译仓库,编译器不需要完全构建依赖项.相反,只需要它们的"元数据"(即类型,依赖关系,导出列表). 在编译过程的早期生成此元数据.从Rust1.38.0开始,Cargo利用这一点,在准备好元数据后立即自动开始构建依赖的仓库. 检查错误使用mem::{uninitialize…...

前端埋点上报的几种方式

现代Web应用程序中&#xff0c;埋点上报是一种重要的数据收集和分析手段。本文将介绍前端埋点上报的几种常见方式&#xff0c;并详细阐述如何在项目中运用这些方式进行数据上报&#xff0c;以帮助开发者更好地进行数据收集和分析。 上报方式 在前端中&#xff0c;常见的埋点上…...

外部 prometheus监控k8s集群资源

prometheus监控k8s集群资源 一&#xff0c;通过CADvisior 监控pod的资源状态1.1 授权外边用户可以访问prometheus接口。1.2 获取token保存1.3 配置prometheus.yml 启动并查看状态1.4 Grafana 导入仪表盘 二&#xff0c;通过kube-state-metrics 监控k8s资源状态2.1 部署 kube-st…...

centos安装神通数据库

1、安装 wget工具 yum install -y wget2、安装rar解压工具 wget --no-check-certificate http://www.rarlab.com/rar/rarlinux-x64-5.3.0.tar.gz tar zxvf rarlinux-x64-5.3.0.tar.gz && cd rar/ && make install3、下载oscar神通数据库&#xff08;linux 64…...

汇编-PUSHFD和POPFD标志寄存器值压栈和出栈

PUSHFD指令将32位EFLAGS寄存器内容压入堆栈&#xff0c; 而POPFD指令则将栈顶单元内容弹出到EFLAGS寄存器 格式&#xff1a;...

基于SSM的进销存管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…...

Django DRF限流组件

在DRF中&#xff0c;限流发生在认证、权限之后&#xff0c;限流组件的使用步骤&#xff1a; 1、编写自定义限流类&#xff1b; 2、在settings.py中配置redis&#xff1b; 3、安装django-redis; 4、启动redis服务&#xff1b; 5、局部应用&#xff0c;一般是在核心的视图中使用&…...

UEC++ day7

敌人NPC机制 敌人机制分析与需求 新建一个character类来作为敌人&#xff0c;直接建蓝图设置骨骼网格&#xff0c;因为敌人可能多种就不规定死&#xff0c;然后这个敌人肯定需要两个触发器&#xff0c;一个用于大范围巡逻&#xff0c;一个用于是否达到主角近点进行攻击 注意我…...

win11,安装python,pip,和opencv

1,安装python 在应用商店&#xff0c;输入python&#xff0c;下载安装 2&#xff0c;安装pip 在cmd中&#xff0c;输入pip install SomePackage&#xff0c;安装某一个版本的pip 3,安装opencv 在cmd中&#xff0c;输入 pip3 install opencv-contrib-python -i https://pyp…...

kafka入门(一):kafka消息发送与消费

kafka的基础概念 Producer (消息生产者) 向主题发布消息的客户端应用程序称为生产者(Producer)&#xff0c;生产者用于持续不断的向某个主题发送消息。 Consumer (消息消费者) 订阅主题消息的客户端程序称为消费者(Consumer)&#xff0c;消费者用于处理生产者产生的消息。 Co…...

CMap数据库筛选化学药物

数据库clue.io 文献链接&#xff1a;连接图谱&#xff1a;使用基因表达特征连接小分子、基因和疾病 |科学 (science.org) 基本模式&#xff1a;利用CMap将差异基因列表与数据库参考数据集比对&#xff1b;根据差异表达基因在参考基因表达谱富集情况得到一个相关性分数&#…...

Fluent UDF实战:除了速度入口,你的DEFINE_PROFILE宏还能搞定这些边界条件(温度、组分、壁面接触角全解析)

Fluent UDF实战&#xff1a;DEFINE_PROFILE宏在复杂边界条件中的高阶应用 在计算流体动力学&#xff08;CFD&#xff09;仿真中&#xff0c;标准界面提供的边界条件设置往往难以满足复杂物理场景的需求。当您需要定义随空间变化的温度场、随时间波动的组分浓度&#xff0c;或是…...

GitHub每日访客计数器:从原理到部署的全栈实践

1. 项目概述与核心价值 作为一个在开源社区混迹多年的开发者&#xff0c;我经常好奇一个问题&#xff1a;我的GitHub个人主页&#xff0c;每天到底有多少人来看&#xff1f;GitHub本身只提供了一个总访问量的统计&#xff0c;但这个数字是累积的&#xff0c;你很难知道今天的热…...

NBTExplorer终极指南:如何轻松编辑Minecraft游戏数据文件

NBTExplorer终极指南&#xff1a;如何轻松编辑Minecraft游戏数据文件 【免费下载链接】NBTExplorer A graphical NBT editor for all Minecraft NBT data sources 项目地址: https://gitcode.com/gh_mirrors/nb/NBTExplorer 你是否曾经想要深入了解《我的世界》游戏内部…...

3分钟实现B站视频转文字:bili2text技术架构与实现原理深度解析

3分钟实现B站视频转文字&#xff1a;bili2text技术架构与实现原理深度解析 【免费下载链接】bili2text Bilibili视频转文字&#xff0c;一步到位&#xff0c;输入链接即可使用 项目地址: https://gitcode.com/gh_mirrors/bi/bili2text B站视频转文字工具bili2text是一个…...

WeDot引擎:开源游戏引擎架构解析与开发实践指南

1. 项目概述与核心定位如果你是一名游戏开发者&#xff0c;尤其是对Unity或Godot这类主流引擎的某些方面感到“意难平”&#xff0c;或者你正渴望一个更纯粹、更专注于游戏创作本身的开发环境&#xff0c;那么WeDot引擎的出现&#xff0c;或许能给你带来一些新的启发。WeDot是一…...

股市新手必看:八大核心财务指标详解(附实战案例)

看懂这八个指标&#xff0c;你就不再是任人宰割的“韭菜”在股市中&#xff0c;面对密密麻麻的财务数据&#xff0c;很多新手朋友往往一脸茫然。总市值、净资产、净利润、市盈率、市净率……这些指标到底是什么意思&#xff1f;它们能帮我们判断一家公司值不值得投资吗&#xf…...

高速电流监测器响应速度优化与运放设计实践

1. 电流监测器响应速度的关键影响因素在高速光电检测系统中&#xff0c;电流监测器的响应速度直接决定了整个系统的实时性能。MAX4007作为一款高精度高压侧电流监测器&#xff0c;其标准配置下的响应时间往往成为系统瓶颈。通过深入分析&#xff0c;我们发现影响响应速度的核心…...

OpenClaw 全套落地包(可直接复制即用)

一、Docker 一键部署配置 新建文件夹 openclaw&#xff0c;里面新建文件 docker-compose.yml&#xff0c;复制下面全部内容&#xff1a; yaml version: 3.8 services:openclaw:image: openclaw/openclaw:latestcontainer_name: openclawports:- "8000:8000"volume…...

AI应用开发框架goodai-base:模块化设计、核心原理与实战指南

1. 项目概述&#xff1a;一个为AI应用量身定制的“基础底座” 最近在GitHub上看到一个挺有意思的项目&#xff0c;叫 MrCipherSmith/goodai-base 。光看名字&#xff0c; goodai-base &#xff0c;一个“好的AI基础”&#xff0c;就让人忍不住想点进去看看。这名字起得挺直…...

避坑指南:STM32F4的ADC采样FSR传感器,如何稳定读数并校准压力值?

STM32F4高精度压力传感实战&#xff1a;从ADC优化到非线性校准的工程化解决方案 当你的智能手套需要精确捕捉手指力度&#xff0c;或是医疗床垫必须实时监测患者压力分布时&#xff0c;FSR薄膜压力传感器配合STM32F4的ADC模块本应是理想选择。但实际开发中&#xff0c;工程师们…...