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

uni-app 小程序中的定位问题 以及 页面安全距离

uni-app 小程序定位问题
一、问题描述:页面上定位偏移

最近接到一个需求,在小程序首页写一个新手引导。
具体内容就是:整个页面背景黑色半透明蒙层,首页上的某几个按钮需要高亮显示(有一些引导提示语指向按钮)

1. 我的问题

ps: 写之前没想到有兼容问题,太大意了;写完成了自测才发现,emo~

最开始,我是直接新写了一个组件,全屏、背景黑色半透明蒙层;然后把要高亮的按钮写出来,通过定位将这些按钮定位到页面以前的位置上;但是,不管我是用rpx或者%或者vh,后面我又考虑了安全距离的问题。但是在不同机型上还是或多或少又问题

2. 解决方案

2.1 方案一:能用
在首页(父组件)中获取到要高亮元素的文职,并且传递给蒙层组件,然后在蒙层组件中通过定位将元素定位到指定位置。而如果又引导线,提示语等,都基于这个元素去定位、移动即可

缺点:
如果存在引导线,提示语等,基于高亮元素去定位,在不同机型(特别是比较老的机型)上可能以一点的便宜,但不会很大,定位的时候留足空间,不要重叠即可

  • 怎么获取元素的位置
const query = uni.createSelectorQuery().in(this);
query.select(".editIcon").boundingClientRect((data) => {console.log("得到布局位置信息" + JSON.stringify(data));console.log("节点离页面顶部的距离为" + data.top);
}).exec();

2.2 方案二:效果最好,但开发量较大,可视实际情况选用
使用蒙版镂空定位,方法如下:

  • 父组件(首页),整体 z-index: 1
  • 子组件(蒙层组件),只负责蒙层和逻辑部分,判断当前需要显示那个高亮元素,回传到父组件(this.$parent.xxx = xxx 或者 其他通信方案),然后再父组件中通过这个变量去判断 z-index: 2
  • 父组件(首页),父组件中通过这个变量去判断,当时是否高亮显示元素 z-index: 3 这样这个元素就显示在蒙层之上了

缺点:

  1. 元素需要写两套(通过变量判断是否展示蒙层,具体展示什么内容);一套原本正常的元素,一套蒙层高亮元素
  2. 如果高亮元素较多的话,会改动较大

注意:z-index的用法

  1. 只有在元素的position属性值为 relative, absolute, fixed或sticky(即非static) 时才会起作用
  2. 父元素的z-index属性值必须小于子元素的z-index属性值并且也要有position属性值(非static)
二、小程序上的安全距离

safeAreaInsets 安全距离:主要指的是在全面屏手机(如 iPhone X 及以上型号)上,屏幕顶部和底部为了容纳刘海屏或前置摄像头而预留的安全区域。(iPhone X 之前和大部分安卓机是没有的,为0)

1. 怎么获取安全距离
uni.getSystemInfo({ // 获取窗口信息success: (res) => {this.topSafeDistance = res.safeArea.top; // 顶部安全区域距离}
})

safeAreaInsets 的结构

参数类型说明
leftNumber安全区域左侧插入位置
rightNumber安全区域右侧插入位置
topNumber安全区顶部插入位置
bottomNumber安全区域底部插入位置
2. 在那些地方需要注意这个安全距离 => 说白了就是不同机型的适配问题
  1. 页面(绝对)定位 => 正常写页面不会有什么问题;举例:如果想在页面写好后,想写一个元素定位到已经写好的页面上去重叠,就需要注意这个安全距离了,不然会出现定位偏移问题。
  2. 自定义顶部导航栏
  3. 自定义底部导航栏

文章仅为本人学习过程的一个记录,仅供参考,如有问题,欢迎指出!

http://www.xdnf.cn/news/1852.html

相关文章:

  • 【前端】如何检查内存泄漏
  • 中国250米土壤质地类型数据
  • 上海SMT贴片加工核心工艺与优化方案
  • 文档编辑:reStructuredText全面使用指南 — 第四部分 高级主题
  • 自然语言处理将如何颠覆未来教育?个性化学习新纪元
  • 潮了 低配电脑6G显存生成60秒AI视频 本地部署/一键包/云算力部署/批量生成
  • aws(学习笔记第三十九课) iot-msk-pipeline
  • 【开源工具】Python打造高颜值串口调试助手:支持自动收发+历史记录+多主题切换(附完整源码)
  • 不会挖竞品关键词?你每天都在浪费 50% 的 SEO 预算!
  • Linux的基础指令
  • 实战指南:搭建智慧变电站管理平台全流程解析(二)
  • Flutter Dart中的函数参数 默函数的定义 可选参数 箭头函数 匿名函认参数 命名参类数 闭包等
  • 第八章.干货干货!!!SpringAI手撸MCP服务
  • C++ 的 trivially relocatable
  • 解决ssh拉取服务器数据,要多次输入密码的问题
  • PyTorch 实现食物图像分类实战:从数据处理到模型训练
  • 植物合成生物学:上帝之手,万物皆可合
  • 【MQ篇】RabbitMQ的消费者确认机制实战!
  • 【金仓数据库征文】金仓数据库:开启未来技术脑洞,探索数据库无限可能
  • 脚本批量启动Node服务器
  • 【金仓数据库征文】_AI 赋能数据库运维:金仓KES的智能化未来
  • 复杂地形越野机器人导航新突破!VERTIFORMER:数据高效多任务Transformer助力越野机器人移动导航
  • 计算机组成原理第二章 数据的表示和运算——2.1数制与编码
  • HTMLcss实现网站抽奖
  • Ubuntu 下 Nginx 1.28.0 源码编译安装与 systemd 管理全流程指南
  • 本地使用Ollama部署DeepSeek
  • 30天通过软考高项-第三天
  • redis 数据类型新手练习系列——string类型
  • 【Java并发】【LinkedBlockingQueue】适合初学体质的LinkedBlockingQueue入门
  • 计算机组成原理-408考点-数的表示