uniApp开发注意要点提炼-xyphf

我们在使用uniApp开发的时候,很多朋友由于对多端兼容性的不了解,结果在多端编译的时候经常出这样或者那样的问题,而不断的说uniApp这坑那坑的,下面我基于自身经验和官网说明提炼一些常见的注意要点。

因为很多公司时常初衷是开发一个微信小程序,而程序员开发时只专注于微信小程序,而开发差不多了,领导一拍脑袋,又要一个APP或者抖音小程序等,这时候领导可能也听说了uniApp支持多端打包的,但是这个时候你构建其他端时就会大面积报异常,这个时候难免要被PUA考虑问题不够全面,为了防患于未然,我们一开始开发任意一端时,就要尽可能的考虑所有端的兼容性支持问题。

1、最好只用class选择器。H5不支持 *选择器, 百度小程序不支持属性选择器。

2、body的元素选择器请改为page

3、div、ul、li改为view,span、font改为text,a改为navigator、img改为image,css不能引入本地图片,如果非要引入可以试试写行内样式

<view class="content" style="background-image: url('../../static/index-top-bg.png');">
</view>

4、组件和页面样式相互影响,H5端默认开启了 scoped,其他端并未开启,并且百度小程序不支持scoped建议开发时全部使用class父子级管理来处理

5、uniApp推荐并支持使用flex布局【快应用只支持flex布局】,但是不支持太新的CSS属性;vue页面在App端,默认是被系统rom的webview渲染的,Android4.4对应的webview是chrome37,如果你知道使用的CSS属性是否被支持,可以使用使用CSS支持查询器查询一下。

关于手机webview内核、默认浏览器、各家小程序的渲染层浏览器的区别和兼容性

6、video、map等原生组件无法遮挡,非H5端有原生组件并引发了原生组件层级高于前端组件的问题,比如要遮挡video、map等原生组件,请使用cover-view组件;但是请注意360旗下轻应用和字节系下抖音、飞书小程序是不支持的cover-view组件的;cover-view组件不要嵌套,支付宝小程序不支持。

7、不要使用浏览器专用js对象,比如document、xmlhttp、cookie、window、location、navigator、localstorage、websql、indexdb、webgl等,因为非H5不支持。如果你的代码没有直接使用这些,那很可能是引入的三方库使用了这些,建议使用uniApp官方提供的具有相同功能的API或寻找其他替代方案。

8、蒙版弹层不能覆盖原生底部tab,官网建议动态隐藏tabbar但是导致的闪烁问题客户不满意,为了规避此问题,建议使用自定义tab,如果使用原生底部tab,这些是要在pages.json里配置的。

CSS 內使用 vh 单位的时候注意 100vh 包含导航栏,使用时需要减去导航栏和 tabBar 高度,部分浏览器还包含浏览器操作栏高度,使用时请注意。

APP 和小程序的导航栏和 tabbar 均是原生控件,元素区域坐标是不包含原生导航栏和 tabbar 的;而 H5 里导航栏和 tabbar 是 div 模拟实现的,所以元素坐标会包含导航栏和tabbar的高度。为了优雅的解决多端高度定位问题,uni-app 新增了2个css变量:--window-top--window-bottom,这代表了页面的内容区域距离顶部和底部的距离。举个实例,如果你想在原生tabbar 上方悬浮一个菜单,之前写 bottom:0。这样的写法编译到 h5 后,这个菜单会和 tabbar 重叠,位于屏幕底部。而改为使用 bottom:var(--window-bottom),则不管在 app 下还是在h5下,这个菜单都是悬浮在 tabbar 上浮的。这就避免了写条件编译代码。当然仍然也可以使用 H5 的条件编译处理界面的不同。——官方说了一大堆,所以本人建议还是别用原生tabbar好了

9、位置坐标系统一为国测局坐标系gcj02

10、使用通过 npm 引入第三方js,只有是 h5 平台才 import 相应的库;

11、data 后面必须写 function;不能修改 props 的值;组件最外层 template 节点下不允许包含多个节点;

12、如果无法发送请求,请核验微信公众平台小程序开发者设置是否有设置请求域名;开发工具可以请求但真机无法请求请核验域名是否是https协议[真机是必须https];如果是web-view页面加载失败请查看微信公众平台小程序开发者设置业务域名是否有配置,页面的服务器根目录是否有添加微信小程序web-view的鉴权文件;如果遇到跨域造成js无法联网,注意网络请求(request、uploadFile、downloadFile等)在浏览器存在跨域限制

13、使用罗盘、地理位置、加速计等相关接口需要使用 https 协议,本地预览(localhost)可以使用 http 协议。

14、不要在组件内使用 onLoad、onShow 等页面生命周期。

15、自定义组件请加上前缀(但不能是 u- 和 uni-)避免与官方组件冲突。

16、使用flex布局时,直接给自定义组件的父元素设置为display:flex不能影响到自定义组件内部的根节点,需要设置当前自定义组件为display:flex才可以。

17、在自定义组件内部设置根元素高度为100%,不能撑满自定义组件父元素。需要同时设置当前自定义组件高度为100%才可以

18、[uniapp vendor.js 过大的处理方式]

        (1)HBuilderX创建的项目勾选运行-->运行到小程序模拟器-->运行时是否压缩代码

        (2) cli创建的项目可以在package.json中添加参数--minimize,示例:"dev:mp-weixin": "cross-env NODE_ENV=development UNI_PLATFORM=mp-weixin vue-cli-service uni-build --watch --minimize"

        (3)使用分包优化

19、showLoading 是不透传的,也就是说 loading 显示的时候无法点击页面内容。

20、文件名或文件夹名中不允许出现 @ 符号

21、网络请求返回的数据会严格按照 dataType 进行处理,如果不符合规范则会抛出错误,而不是按照原格式返回。

22、canvas 组件的标识是 id,而不是 canvas-id。目前还未进行处理,所以需要主动添加 id 属性。

23、使用伪元素做边框时,高度值不能用 1rpx,需要直接用 1px。

24、支付宝小程序不支持 ECharts;

25、v-if 和 v-for 不可在同一标签下同时使用;

26、页面蒙版弹出下面页面仍然可以滚动,请在蒙版的外层标签添加@touchmove.stop.prevent="() => {}"

<view class="appreciate" @touchmove.stop.prevent="() => {}">
</view>

27、1像素问题处理

                .bottom-btn {position: relative;height: 80rpx;display: flex;}.bottom-btn:after {content: " ";position: absolute;left: 0;bottom: 0;right: 0;height: 1px;color: #e0e0e0;transform-origin: 0 100%;transform: scaleY(0.5);z-index: 1;}.bottom-btn:before {content: " ";position: absolute;left: 0;top: 0;right: 0;height: 1px;border-bottom: 1px solid #F5F5F5;color: #e0e0e0;transform-origin: 0 0;transform: scaleY(0.5);z-index: 1;}

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

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

相关文章

面试--并发多线程基础

1、线程池的理解 线程池就是要达到线程复用的目的&#xff0c;对线程的创建和消耗会涉及到cpu上下文切换、内存分配等&#xff0c;会带来性能的消耗&#xff1b;提高响应速度&#xff0c;任务到达时&#xff0c;任务可以不需要等到线程创建就能立即执行&#xff1b;提高线程的…

“ Mac ” PK “ window ” 系统,谁才是赢家

一、快速了解 Mac 系统和 window 系统 Mac 系统和 window 系统是由两家不同的互联网公司开发。Mac 系统是 1984 年苹果公司主持开发的系统软件主要服务于苹果公司旗下的电子产品&#xff0c;适用的设备类型有&#xff1a;Macintosh、Power Macintosh、 Power Mac G3 、Power …

【Java】Java中的引用类型

强引用&#xff08;StrongReference&#xff09; 通过new直接创建的对象&#xff0c;只要该对象还可以被其它对象使用或访问到&#xff0c;就不会被回收 软引用&#xff08;SoftReference&#xff09; 引用一个对象&#xff0c;该对象在系统内存溢出不足时&#xff0c;会自动…

有了 GPT,还需要付费咨询吗?

之前写过一篇文章《在创业公司&#xff0c;我靠它续命 …》&#xff0c;提到现在写代码基本靠 GPT。现在这种状况不仅没有改变&#xff0c;反而依赖更深。公司立项开发产品的 Linux 版本&#xff0c;全靠我一个人。我之前虽然一直使用 Linux 开发环境&#xff0c;对 Linux 系统…

21.13 Python 实现端口流量转发

端口流量转发&#xff08;Port Forwarding&#xff09;是一种网络通信技术&#xff0c;用于将特定的网络流量从一个端口或网络地址转发到另一个端口或地址。它在网络中扮演着一个非常重要的角色&#xff0c;在Python语言中实现端口转发非常容易。 如下这段代码实现了一个基本的…

Linux -------------------设置防火墙和SELinux

&#xff08;一&#xff09;防火墙概述 防火墙的概念&#xff1a;防火墙是一种非常重要的网络安全工具&#xff0c;它是网络安全的重要组成部分&#xff0c;用于保护计算机网络免受未经授权的访问、恶意攻击和数据泄漏等威胁等。 防火墙的特点 防火墙通常具备以下几个特点。 …

【C语言】备战校赛Day1

日期:11.1 星期二 L1-001 Hello World 题目描述 这道超级简单的题目没有任何输入。 你只需要在一行中输出著名短句“Hello World!”就可以了。 输入样例: 无 输出样例: Hello World! 解题代码 int main() {printf("Hello World!");return 0; } 该题较为简单,但要注…

基于Tensorflow卷积神经网络玉米病害识别系统(UI界面)

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 Tensorflow是一个流行的机器学习框架&#xff0c;可用于训练和部署各种人工智能模型。玉米病害识别系统基于Tensorf…

[idea]关于idea开发乱码的配置

在JAVA开发中&#xff0c;一般统一设置为UTF-8的编码&#xff0c;包括但不限于开发工具、日志架构、虚拟机、文件编码等。常见配置如下&#xff1a; 1、IDEA工具 在idea64.exe.vmoptions、idea.exe.vmoptions中添加&#xff1a; -Dfile.encodingUTF-8 2、JAVA 运行在window…

chat2db初步使用和体验AI

今天下载chat2db体验了下将主要功能和使用截图总结下&#xff1a; 功能&#xff1a; 1.传统客户端能使用的功能基本都有&#xff0c;并且增加了导出excel等便捷的能力。 2.报表功能&#xff1a; 可以根据查询结果进行对应报表可视化显示 3.AI解析sql 可以根据输入的汉语例如…

开源的网站数据分析统计平台——Matomo

Matomo 文章目录 Matomo前言一、环境准备1. 整体安装流程2.安装PHP 7.3.303.nginx配置4.安装matomo4.1 访问安装页面 http://192.168.10.45:8088/index.php4.2 连接数据库4.3 设置管理员账号4.4 生成js跟踪代码4.5 安装完成4.6 警告修改4.7 刷新页面&#xff0c;就可以看到登陆…

Linux中阶教程:bash shell基础

文章目录 输入输出赋值和计算条件判断函数for 循环数组及其遍历其他控制语句 输入输出 echo表示打印字符串&#xff1b;read表示获取用户输入&#xff1b;$用于引用变量。 # test1.sh bash中用#进行单行注释 echo "input your name:" read user_name echo "h…

软件测试报告所需周期和费用简析

软件测试报告是在软件开发和测试过程中生成的重要文档之一。它提供了对软件系统经过全面测试后的状态和质量的详细描述&#xff0c;以记录软件测试的过程和结果。 生成一个完整的测试报告需要根据软件项目的规模和复杂性来确定时间。较大规模和复杂的软件项目可能需要更长的时…

【华为OD题库-002】需要打开多少监视器-Java

题目 某长方形停车场&#xff0c;每个车位上方都有对应监控器&#xff0c;当且仅当在当前车位或者前后左右四个方向任意一个车位范围停车时&#xff0c;监控器才需要打开: 给出某一时刻停车场的停车分布&#xff0c;请统计最少需要打开多少个监控器 输入描述 第一行输入m&#…

【错误解决方案】ModuleNotFoundError: No module named ‘feather‘

1. 错误提示 在python程序中&#xff0c;尝试导入一个名为feather的模块&#xff0c;但Python提示找不到这个模块。 错误提示&#xff1a;ModuleNotFoundError: No module named feather 2. 解决方案 出现这种情况&#xff0c;有可能是因为你还没有安装这个模块&#xff0c;…

MFC简单字符串压缩程序

一个mfc简单字符串压缩程序;按以下情况进行压缩; 1 仅压缩连续重复出现的字符。比如”abcbc”无连续重复字符,压缩后还是”abcbc”。 2 压缩的格式为”字符重复的次数+字符”。例如,”xxxyyyyyyz”压缩后就成为”3x6yz”。 void CYssDlg::OnButton1() {// TODO: Add you…

是否会有 GPT-5 的发布?

本心、输入输出、结果 文章目录 是否会有 GPT-5 的发布?前言围绕 GPT-5 的信息OpenAI 期待增长GPT-5 - 到底是真的在训练,还是一个虚构的故事Sam Altman字里行间包含的信息我们在什么时候可以期待 GPT-5 的发布GPT-5 预计将在哪些方向努力GPT-5 在听觉领域GPT-5 在视频处理领…

Flutter 小技巧之不一样的思路实现炫酷 3D 翻页折叠动画

今天聊一个比较有意思的 Flutter 动画实现&#xff0c;如果需要实现一个如下图的 3D 折叠动画效果&#xff0c;你会选择通过什么方式&#xff1f; 相信可能很多人第一想法就是&#xff1a;在 Dart 里通过矩阵变换配合 Canvas 实现。 因为这个效果其实也算「常见」&#xff0c;…

使用 PyTorch 构建自定义 GPT

一、介绍 介绍大模型&#xff0c;首先考虑一下使用 ChatGPT、Bing Chat 或 Bard 。您是否想过拥有自己的 ChatGPT 会是什么样子&#xff1f;想象一下创建自己的 GPT 模型的兴奋程度。这确实是一种难以置信的感觉&#xff01; 为了开始构建自定义 GPT 的旅程&#xff0c;让我们仔…

python中dict的使用——如何将列表转化为字典

代码1和代码2的作用都是将列表转化为dict&#xff0c;但是很明显代码2的代码更加简洁 代码1&#xff1a; word_2_onehot {} dic["A","B","C","D"] for d,s in enumerate(dic):word_2_onehot[s]d print(word_2_onehot) #结果为&#…