位置: IT常识 - 正文

uniapp宽屏开发PC端方案,及衍生问题解决(uniapp宽度)

编辑:rootadmin
uniapp宽屏开发PC端方案,及衍生问题解决

推荐整理分享uniapp宽屏开发PC端方案,及衍生问题解决(uniapp宽度),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:uniapp 宽屏,uniapp开发视频教程,uniapp 宽屏,uniapp适应大屏幕,uniapp开发视频教程,uniapp宽屏适配,uniapp开发pc页面,uniapp适应大屏幕,内容如对您有帮助,希望把文章链接给更多的朋友!

需要在uniapp的pages.json文件中配置

"rpxCalcMaxDeviceWidth": 3840,// rpx 计算所支持的最大设备宽度,单位 px,默认值为 960 "rpxCalcBaseDeviceWidth": 3840, // rpx 计算使用的基准设备宽度,设备实际宽度超出 rpx 计算所支持的最大设备宽度时将按基准宽度计算,单位 px,默认值为 375  "rpxCalcIncludeWidth": 750 // rpx 计算特殊处理的值,始终按实际的设备宽度计算,单位 rpx,默认值为 750

正常电脑没有高于3840像素宽的,这个程度就足以;

在使用时,只要正常的按照1920/750 = 2.56的比例,在HBuliderX中进行比例配置,使用时进行px转化rpx即可。

 

调整完rpx后发现的问题:

问题一、pc端字体过大

问题描述:

但是在大屏中uniapp的rpx却衍生出一个问题,这样会有一个问题,就是当前的rpx是以3840rpx或以下(符合当前屏幕宽度)为基准分成750份处理的,以上任何一个属性都无法单独调整字体大小,这导致哪怕是1rpx都过于庞大;

直接使用标准单位px的问题,一是无法以屏幕宽度自动调整字体大小,二是12px已经是浏览器能解析的最小字体了,但是12px以常规的电脑屏幕1920像素来做基准,还是过于大了,实际开发中,应该需要更小的字体,我们如突破这个12px的极限,使用比12px更小的字体大小?

众所周知,在传统js中,最小的文字大小是12px,再小就只能使用缩小属性(transform:scale)进行调整,而如果整个页面都使用缩小属性,一是无法精确把控字体大小,二是只是字体变小,字体元素本身却没有任何改变,依旧以原大小进行占位,这会导致布局混乱。

解决:

uniapp宽屏开发PC端方案,及衍生问题解决(uniapp宽度)

我苦求答案,最终在uniapp的中发现了有一个及其有用却又容易被忽视的组件

<page-meta></page-meta>

 其属性中有一个为:

因此,借助这个属性,便可以如此操作:

<page-meta style="display: block;" root-font-size="1px"></page-meta>

注意:page-meta元素只能作为根元素使用,衍生出的PC与移动端同时适配的问题下面有解决

更多page-meta组件的信息,可点击查看官方文档

问题二、字体大小固定:

 接着又衍生出了第二个问题,虽然这样解决了12px最小的问题,这样的大小是以1px为基准进行调整的,这就失去了rpx根据屏幕宽度自动放大缩小的特性,px单位大小是固定死的。

解决:

思路:参考rem处理字体大小的方式,在main.js文件中,配置一个全局函数,由于是在main.js中配置,所以在每次进入页面的时候都会触发此函数。

代码:

//在main.js中配置function sizeFun() {// 宽屏字体大小适配let n = 1920;// 循环运算判断,共9次,最小屏幕192,最大屏幕3640,以下,n是当前预设屏幕宽,i是循环计算次数for (let i = 0; i < 9; i++) {// 如果当前屏幕宽就是设计稿屏幕(1920),就不进行缩放if (uni.getSystemInfoSync().windowWidth == n) {return 1;}// 如果当前屏幕宽小于1920if (uni.getSystemInfoSync().windowWidth < n) {// 那就进入循环,预设屏幕大小减去192,再判断当前屏幕是否大于1920-192n -= 192;// 如果当前屏幕大于预设屏幕,就赋值if (uni.getSystemInfoSync().windowWidth > n) {// i+1:因为i从零开始// 10-i+1:因为要算出当前是倒数第几次循环// 10-i+1/10:因为要取1以下的小数return (10 - (i + 1)) / 10;}}// 如果当前屏幕宽大于1920if (uni.getSystemInfoSync().windowWidth > n) {// 那就进入循环,预设屏幕大小加上192,再判断当前屏幕是否大于1920+192n += 192;// 如果当前屏幕小于预设屏幕,就赋值if (uni.getSystemInfoSync().windowWidth < n) {// i+1:因为i从零开始//(i+1)/10:因为要算出当前是第几次循环,得出小数,// 1+i+1/10:取1以上的小数// 结束循环return 1 + ((i + 1) / 10);}}}}//配置到全局方便使用Vue.prototype.$pageSize = sizeFun();

使用时:

<!-- 每次进入页面时都会判断当前页面宽度,并给出字体大小比例适配 --><page-meta style="display: block;" :root-font-size="$pageSize+'px'"><page-meta>

问题三、如何同时适配PC与移动端?

解决:

思路:由于PC的根元素必须是<page-meta></page-meta>因此要么pc和移动端都在page-meta的规则下使用v-if进行判断渲染,判断当前的设备是移动端或pc端,然后渲染对应的内容。要么就把移动端PC端文件分开,先判断,后通过uni.reLaunch进行跳转对应页面。

代码:

//main.js文件中配置// 是不是pc,通过判断进入对应页面function IsPC(path) {const userAgentInfo = navigator.userAgent;const Agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"];let flag = true;for (let v = 0; v < Agents.length; v++) {if (userAgentInfo.indexOf(Agents[v]) > 0) {flag = false;break;}}if (flag) { //在这里获取参数,跳转的时候把当前页面的参数一并带过去let paraString = window.location.href;let pathEnd = paraString.split("?")[1];console.log(path);//true为PC端,false为手机端uni.reLaunch({url: pathEnd ? `${path}?${pathEnd}` : `${path}`});return false;}}// 是不是移动端,通过判断进入对应页面function IsPE(path) {const userAgentInfo = navigator.userAgent;const Agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"];let flag = true;for (let v = 0; v < Agents.length; v++) {if (userAgentInfo.indexOf(Agents[v]) > 0) {flag = false;break;}}if (!flag) { //在这里获取参数,跳转的时候把当前页面的参数一并带过去let paraString = window.location.href;let pathEnd = paraString.split("?")[1];//true为PC端,false为手机端uni.reLaunch({url: pathEnd ? `${path}?${pathEnd}` : `${path}`});return false;}}//挂载全局方便使用Vue.prototype.IsPC = IsPC;Vue.prototype.IsPE = IsPE;//使用时(在移动端页面判断是否为pc端)://判断是否为pc端设备,参数为如果是pc端,要跳转的pc端页面路径,加上/pagesthis.isPC("/pages/pcindex/pcindex");//在pc端页面使用,判断是否为移动端//判断是否为移动端设备,参数为如果是移动端,要跳转的移动端页面路径,加上/pagesthis.isPE("/pages/index/index");

注意:在进行移动端与pc端的同步开发时,如果需要任何页面根据设备跳转对应页面,就尽量保证两个端的url参数相同,或尽量不使用url传参,否则需要自行对页面进行单独处理。

原创码文,创作与探索不易,如有帮助,请点赞支持

本文链接地址:https://www.jiuchutong.com/zhishi/297353.html 转载请保留说明!

上一篇:Linux- 系统随你玩之--网络上的黑客帝国(linux suid)

下一篇:都说计算机今年炸了,究竟炸到什么程度呢?(计算机还热门吗)

  • 苹果高刷新率怎么设置(苹果高刷新率怎么调)

    苹果高刷新率怎么设置(苹果高刷新率怎么调)

  • 苹果平板A2602是什么型号(苹果平板a2602是多大尺寸屏幕)

    苹果平板A2602是什么型号(苹果平板a2602是多大尺寸屏幕)

  • iPhoneX怎么关闭程序 iPhoneX新手势的使用方法(iphonex怎么关闭锁屏密码)

    iPhoneX怎么关闭程序 iPhoneX新手势的使用方法(iphonex怎么关闭锁屏密码)

  • 秒撤回别人能看到吗(秒撤回,能被看见吗?)

    秒撤回别人能看到吗(秒撤回,能被看见吗?)

  • 抖音显示昨天在线是什么意思(抖音显示昨天在线是怎么回事)

    抖音显示昨天在线是什么意思(抖音显示昨天在线是怎么回事)

  • 罗技m185和m186的区别(罗技m185和186的区别)

    罗技m185和m186的区别(罗技m185和186的区别)

  • word在文本下加红色下划线怎么弄(word在文本下加了红色下划线)

    word在文本下加红色下划线怎么弄(word在文本下加了红色下划线)

  • ipad输入键盘分成两部分了怎么办(ipad输入键盘分开了怎么办)

    ipad输入键盘分成两部分了怎么办(ipad输入键盘分开了怎么办)

  • 大脚插件怎样调双采集(大脚插件debuff位置调整)

    大脚插件怎样调双采集(大脚插件debuff位置调整)

  • 荣耀9a是什么时候上市的(荣耀9a是什么时候发布的)

    荣耀9a是什么时候上市的(荣耀9a是什么时候发布的)

  • oppoa59手机自带录屏在哪(oppoa55手机自带的软件有哪些?)

    oppoa59手机自带录屏在哪(oppoa55手机自带的软件有哪些?)

  • 苹果听筒进水了有杂音(苹果听筒进水了有杂音保修吗)

    苹果听筒进水了有杂音(苹果听筒进水了有杂音保修吗)

  • pr有自带的音效吗(pr里自带音效)

    pr有自带的音效吗(pr里自带音效)

  • 苹果8p摄像头部位发烫(苹果8p手机摄像头)

    苹果8p摄像头部位发烫(苹果8p手机摄像头)

  • 腾讯课堂能分屏吗(腾讯课堂能分屏看吗)

    腾讯课堂能分屏吗(腾讯课堂能分屏看吗)

  • 应用程序错误怎么处理(应用程序错误怎么办电脑)

    应用程序错误怎么处理(应用程序错误怎么办电脑)

  • 荣耀note8是什么屏幕(荣耀note8怎么样)

    荣耀note8是什么屏幕(荣耀note8怎么样)

  • 蓝牙耳机连上还是外放(蓝牙耳机连上还是外放声音)

    蓝牙耳机连上还是外放(蓝牙耳机连上还是外放声音)

  • cpu长期100度会烧吗(cpu长期100度会烧坏吗)

    cpu长期100度会烧吗(cpu长期100度会烧坏吗)

  • 读取外置储存权限在哪(读取外置储存权利)

    读取外置储存权限在哪(读取外置储存权利)

  • 探探头像审核多久(探探头像为什么审核不通过)

    探探头像审核多久(探探头像为什么审核不通过)

  • 华为mate30支持50倍变焦吗(华为mate30支持5gwifi吗)

    华为mate30支持50倍变焦吗(华为mate30支持5gwifi吗)

  • 趣头条人脸认证在哪(登录趣头条)

    趣头条人脸认证在哪(登录趣头条)

  • 计算机上的off键是什么键(计算机上的off键是开机键吗)

    计算机上的off键是什么键(计算机上的off键是开机键吗)

  • 苹果云空间满了怎么办(苹果云空间满了还能存照片吗)

    苹果云空间满了怎么办(苹果云空间满了还能存照片吗)

  • 怎么打开volte功能(volte怎么打开?)

    怎么打开volte功能(volte怎么打开?)

  • 三星s10有无线充电吗(三星s10无线充电怎么开启)

    三星s10有无线充电吗(三星s10无线充电怎么开启)

  • 转转如何私聊(转转如何私聊买家)

    转转如何私聊(转转如何私聊买家)

  • 苹果cpu在哪里看(iphone cpu查看)

    苹果cpu在哪里看(iphone cpu查看)

  • 手机如何拒接外省电话(手机怎么设置拒接外国电话)

    手机如何拒接外省电话(手机怎么设置拒接外国电话)

  • 头歌-HTML基础(头歌HTML基础第一关初识HTML)

    头歌-HTML基础(头歌HTML基础第一关初识HTML)

  • 劳务派遣公司差额征税的账务处理
  • 小规模30万免增值税1点怎么申报税款
  • 应付账款里的暂估
  • 代开普通发票需提供哪些材料
  • 深圳增值税普通发票查询真伪
  • 可以现金结算的资产
  • 固定资产折旧直接计入成本
  • 12月工资1月发个税怎么算
  • 核定征收季度核定销售额
  • 免费赠送货物出租合同
  • 小微企业免交增值税,月末结转到营业外收入吗
  • 支付个人无发票怎么入账
  • 代开的增值税专用发票应怎样填写?
  • 找不到契税发票怎么办
  • 公司收到转账支票怎么盖章
  • 承兑 拆分
  • 发票冲红增值税怎么申报
  • 补交增值税如何入账
  • 收地方工会的专用发票
  • pdf格式发票怎么打印标准大小
  • 工程款开票备注栏
  • 单位住房没有房产证是否可以买卖
  • 制造费用分配的的标准是什么?
  • 汽车行业销售折让
  • 企业有哪些项目名称
  • 进料进口
  • 盈余公积的提取基数
  • php的面向对象
  • PHP:getimagesizefromstring()的用法_GD库图像处理函数
  • 结算成本处理怎么取消
  • thinkphp with
  • 马卡雷纳大教堂
  • 预算周转金会计处理怎么做
  • php自带的加密解密函数
  • html表格用法
  • pytorch技巧
  • 会展中心高新技术展览
  • 零售企业商品盘点发生溢余后,在查明原因前,应按
  • 现金流量表本年累计金额怎么算
  • 现金支付的现状
  • 企业通讯费补贴发放规定
  • java多线程经典案例
  • 电竞公司要求
  • 认证一般纳税人之后,之前开的发票作废重新填开的税率
  • 个人所得税数据怎么导入新电脑
  • 分批发货分批付款
  • 发票系统技术维护费
  • 残疾人保障金是什么费用
  • 建造合同信息表
  • 贷款的融资担保费
  • 开票未收到款会计分录
  • 损益类账户借贷方向增减
  • 银行的手续费开票怎么开
  • 商贸公司库存表怎么做
  • 金税盘技术维护费可以抵扣吗
  • 公司不报税会怎样法人有责任么
  • 开始建账需要哪些数据
  • Mysql inner join on的用法实例(必看)
  • server.exe是什么
  • kmservice.exe是什么
  • 启动游戏出现dmp的文件
  • win8.1界面如何改为win7
  • win7旗舰版远程链接登录不上
  • WIN10怎么彻底删除works2
  • win7ie8和ie11
  • 激发灵感的三种方式是什么
  • windows8.1 with bing
  • vue拦截器使用场景
  • python3.8基础教程
  • javascript程序设计教程
  • 基于mvc设计模型的框架
  • 3、BluetoothChat之BluetoothChatService.java
  • 两个python中内置的数值运算函数
  • jquery图片上传
  • 税务行政部门有哪些
  • 重庆市电子税务局发票查询
  • 北京医保网上服务大厅
  • 销售皮棉税率为多少
  • 哈尔滨地税局电话
  • 联通前面加什么可以隐藏号码
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设