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

这篇具有很好参考价值的文章主要介绍了uniapp宽屏开发PC端方案,及衍生问题解决。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

 

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

"rpxCalcMaxDeviceWidth": 3840, 
// rpx 计算所支持的最大设备宽度,单位 px,默认值为 960

 "rpxCalcBaseDeviceWidth": 3840, 
// rpx 计算使用的基准设备宽度,设备实际宽度超出 rpx 计算所支持的最大设备宽度时将按基准宽度计算,单位 px,默认值为 375

  "rpxCalcIncludeWidth": 750 
// rpx 计算特殊处理的值,始终按实际的设备宽度计算,单位 rpx,默认值为 750

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

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

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

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

 

调整完rpx后发现的问题:

问题一、pc端字体过大

问题描述:

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

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

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


解决:

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

<page-meta></page-meta>

 其属性中有一个为:uniapp宽屏开发PC端方案,及衍生问题解决

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

<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;
		}

		// 如果当前屏幕宽小于1920
		if (uni.getSystemInfoSync().windowWidth < n) {
			// 那就进入循环,预设屏幕大小减去192,再判断当前屏幕是否大于1920-192
			n -= 192;
			// 如果当前屏幕大于预设屏幕,就赋值
			if (uni.getSystemInfoSync().windowWidth > n) {
				// i+1:因为i从零开始
				// 10-i+1:因为要算出当前是倒数第几次循环
				// 10-i+1/10:因为要取1以下的小数
				return (10 - (i + 1)) / 10;
			}
		}

		// 如果当前屏幕宽大于1920
		if (uni.getSystemInfoSync().windowWidth > n) {
			// 那就进入循环,预设屏幕大小加上192,再判断当前屏幕是否大于1920+192
			n += 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端页面路径,加上/pages
this.isPC("/pages/pcindex/pcindex");


//在pc端页面使用,判断是否为移动端
//判断是否为移动端设备,参数为如果是移动端,要跳转的移动端页面路径,加上/pages
this.isPE("/pages/index/index");

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

原创码文,创作与探索不易,如有帮助,请点赞支持文章来源地址https://www.toymoban.com/news/detail-446382.html

到了这里,关于uniapp宽屏开发PC端方案,及衍生问题解决的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【uniapp】uni.request请求跨域问题解决方案

    例如,运行H5页面,请求一个地址资源,如果不是本站地址,浏览器就会报跨域错误,这样访问受限 例如,项目代码里是这样写的,运行H5测试 因为 https://gitcode.net 不是本站地址,根据浏览器同源策略,是会报跨域错误, 打开项目的 manifest.json 文件,以源码视图查看,添加以

    2024年02月05日
    浏览(71)
  • 要在Internet Explorer模式下打开此页面,请使用管理员权限重新安装Microsoft Edge 问题解决

    首先就是使用管理员模式安装最新版的edge; 如果然提示这个,新建一个reg文件,内容如下: 直接执行就行, 如果没有解决问题,请检查ie浏览器是否可以正常打开,不能的话就需要重装ie了 。                                            

    2024年02月11日
    浏览(65)
  • SpringMVC中的拦截器不生效的问题解决以及衍生出的WebMvcConfigurationSupport继承问题思考

    过滤器代码(被Spring扫描并管理): 过滤器配置代码: 按理说我们发出请求 localhost/stu 之后,应该可以看到过滤器的效果,但是失效了。 网上的说法众说纷纭: 没加@Component或者@Configuration注解 @ComponentScan没扫描到 路径配置错了 以上三种说法一一排除之后,我发现一个博客提

    2024年02月01日
    浏览(39)
  • uniapp 微信小程序最新隐私弹窗更新方案,更新后无法登录问题解决方案

    uni-popup ref=\\\"popusAuthorization\\\" type=\\\"center\\\" :maskClick=\\\"false\\\" view class=\\\"contentview\\\" view class=\\\"title\\\"隐私保护指引/view view class=\\\"des\\\" @click=\\\"openPrivacyContract\\\" 在使用当前小程序服务之前,请仔细阅读text style=\\\"color: #07c160;\\\"{{privacyContractName}}/text。如你同意{{privacyContractName}},请点击“同意”开始使

    2024年02月09日
    浏览(47)
  • 华为荣耀系列uniapp无法USB连接手机调试问题解决方案汇总

    华为荣耀系列是一个异常奇葩的手机,经常出现无法调试的问题。 目前我整理出一套完整的切实多次测试可行的解决方案。 一、打开手机的 关于手机 设置里面-一直快速点击版本号,连续点10几下。 此时处于开发者模式。 二、打开 开发者选项 1、打开开发者人员选项 2、打

    2024年02月08日
    浏览(134)
  • windows上进行IOS 应用开发+上架全流程的解决方案(uniapp)

    本人通过查阅网上资料和apple开发文档完全走了一遍上架流程,使用的IDE是uniapp,使用的uni框架编写app,使用云发布。成功上架两款小产品,在这里简单的说一下整体的流程。 一、物料准备: iphone手机,ios系统需要在16以上,否则无法注册apple developer。(注册developer需要在苹

    2024年02月10日
    浏览(59)
  • uniapp微信小程序 页面返回使用navigateBack,返回后页面不刷新问题解决方案

    尝试了众多方法,比如vuex,本地缓存,都不行 1,如果是页面之间的跳转 可以使用onShow生命周期请求数据 2,组件之间的跳转,使用redirectTo,通过关闭当前页面,跳转到指定页面再加载,这种适合二级页面到三级页面数据不更新问题 3,当一级页面使用了某个组件,组件内跳转

    2024年02月15日
    浏览(59)
  • uniapp开发小程序-如何判断小程序是在手机端还是pc端打开

    官方说明 https://developers.weixin.qq.com/miniprogram/dev/devtools/pc-dev.html 小程序如何判断是 PC 平台? 通过 getSystemInfo 官方接口(platform 是 windows) 通过 UA(PC UA 包含 MiniProgramEnv/Windows) App.vue 判断是否是pc端的函数(如果宽度足够也视为pc端) 同时值得注意的是,微信开发者工具的

    2024年02月04日
    浏览(50)
  • uniapp 开发App使用微信H5支付解决方案(包含前后端,后端用的thinkphp)

    我们在开发app常常需要接入支付功能,但是有时候出于包体积或审核的因素,并不想接入支付相关的sdk,这个时候,就可以考虑使用 h5支付 完成购买服务,只需要访问后端返回的 h5支付链接 即可,便捷而简单。 话不多说,进入正题! 前往微信商户平台 - 产品中心 - 我的产品

    2024年02月06日
    浏览(45)
  • pc端与移动端适配 解决方案

    一般网站实现pc端与移动端适配的需求,方案有两个: 1、一套页面,从设计时就考虑到跨设备适配,响应式的一步到位; 2、开发两套页面,根据设备尺寸加载加载不同的资源,目前已经不常见了; 做一个响应式的页面。即只用一个链接,用媒体查询来控制样式。同一个链接

    2024年02月04日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包