Uniapp_app端使用重力感应实现横屏竖屏自动切换

news2024/11/15 12:07:51

1、进入页面默认是竖屏当手机横着的时候页面也跟着横着

进入页面开启定时器调用相关api去触发横屏竖屏,主要核心代码都在onShow()里面和onHide()里

<template>
<view class="monitor">
	<u-no-network></u-no-network>
	<web-view :src="url" v-if="url" :webview-styles="webviewStyles"></web-view>
</view>
</template>

<script>
	let watchScheen;
	import {
		getProjectHref
	} 
	from '@/api/api.js'
	
	export default {
		data() {
			return {
				url:'',
				webviewStyles:{
					progress:{
						background:'#FF3333',
					},
				},
			}
		},
		
		watch: {
			projectInfo(newVal,oldVal) {
				this.init();
			}
		},
		computed:{
			// 项目详情
			projectInfo(){
				return this.$store.state.projectInfo || {}
			},
		},
		onShow() {
			// 进入web-view页面
			// unlockOrientation => 解锁
			// lockOrientation => 锁定
			// "portrait-primary", //可选,字符串类型,支持竖屏
			// "portrait-secondary", //可选,字符串类型,支持反向竖屏
			// "landscape-primary", //可选,字符串类型,支持横屏
			// "landscape-secondary" //可选,字符串类型,支持反向横屏
			// #ifdef APP-PLUS
			plus.screen.unlockOrientation('portrait-primary');
			/* 5+环境屏幕旋转 */
			watchScheen = setInterval(()=>{
				// 屏幕方向数值: HOME键在右, 0 - 竖屏; 90 - 横屏;  HOME'键在左, 180 - 反向竖屏; -90 - 反向横屏;
				let c = plus.navigator.getOrientation();
				if(c == 0){
					console.log('竖屏',c)
					plus.screen.lockOrientation('portrait-primary'); //锁定竖屏
					plus.navigator.setStatusBarStyle('dark');
					plus.screen.unlockOrientation();
					uni.showTabBar()
				} else if(c == 180){
					console.log('反向竖屏',c)
					plus.screen.lockOrientation('portrait-secondary'); //锁定横屏
					plus.navigator.setStatusBarStyle('dark');
					plus.screen.unlockOrientation();
					uni.hideTabBar()
				} else if(c == -90){
					console.log('反向横屏',c)
					plus.screen.lockOrientation('landscape-secondary'); //锁定反向横屏
					plus.navigator.setStatusBarStyle('dark');
					plus.screen.unlockOrientation();
					uni.hideTabBar()
				} else {
					console.log('横屏',c)
					plus.screen.lockOrientation('landscape-primary'); //锁定反向横屏
					plus.navigator.setStatusBarStyle('dark');
					plus.screen.unlockOrientation();
					uni.hideTabBar()
				}
			},200)
			
			// #endif
			uni.setNavigationBarTitle({
				title:"监控"
			})
			this.init()
		},
		
		onHide() {
			clearInterval(watchScheen)
			// #ifdef APP-PLUS
			/* 5+环境锁定屏幕方向 */
			plus.screen.lockOrientation('portrait-primary'); //锁定
			// #endif
		},
		
		methods:{
			init(){
				uni.showLoading({
					title:"加载中..."
				})
				getProjectHref({
					projectId:this.projectInfo.id,
					hyperLinkAddressType :2
				}).then(res=>{
					if(res){
						this.url = this.$u.trim(res.hyperLinkAddress)
						console.log(this.url);
						// #ifdef APP-PLUS
						let timer = setInterval(()=>{
							uni.setNavigationBarTitle({
								title:"监控"
							})
						},300)
						setTimeout(()=>{
							uni.hideLoading()
							clearInterval(timer)
							timer = null
							var currentWebview = this.$mp.page.$getAppWebview() //获取当前页面的webview对象
							var wv = currentWebview.children()[0]
							wv.setStyle({
								scalable:true,
							})
						},1000*3)
						// #endif
						uni.hideLoading()
					}else{
						this.url = ''
						uni.hideLoading()
						this.utils.toast("此项目暂未配置超链接")
					}
				})
			}
		}
	}
</script>

<style lang="scss" scoped>
	iframe {
		background-color: #111934;
	}
</style>

2、调用重力感应相关api还要在pages.json中添加如下配置

uniapp文档中screenOrientation地址

"globalStyle": {
		"backgroundColor": "#F8F8F8",
		"navigationBarBackgroundColor": "#F8F8F8",
		"navigationBarTextStyle": "white", // 状态栏字体为白色,只能为 white-白色,black-黑色 二选一
		"pageOrientation": "auto" //横屏配置,全局屏幕旋转设置(仅 APP/微信/QQ小程序),支持 auto / portrait / landscape
	},
	"app-plus": {
		"screenOrientation": [
			"portrait-primary",     //可选,字符串类型,支持竖屏
			"portrait-secondary",   //可选,字符串类型,支持反向竖屏
			"landscape-primary",    //可选,字符串类型,支持横屏
			"landscape-secondary"   //可选,字符串类型,支持反向横屏
		],
		"background":"#111934"
	},

因为我是开发app和小程序一起的所以小程序主要的配置实在page.json里面添加这些属性,如果你开发不涉及到小程序就不用加,只需要加globalStyle中的pageOrientation属性

在这里插入图片描述

3、App端配置找到manifest.json文件找到源码视图添加如下配置

//app-plus->screenOrientation
/* ios横屏配置 */
"screenOrientation" : [
   "portrait-primary", //可选,字符串类型,支持竖屏
   "portrait-secondary", //可选,字符串类型,支持反向竖屏
   "landscape-primary", //可选,字符串类型,支持横屏
   "landscape-secondary" //可选,字符串类型,支持反向横屏
],

打包部署测试后发现Android和ios都能正常旋转,但是后面测试发现在ios16版本以上会出现会横屏但是旋转手机竖屏回不来,只有ios16(苹果最新版)版本以上有这个问题在需要在配置中添加"flexible": true,完美解决。

在这里插入图片描述

效果截图如下:

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

6.使用typeof注释,只读修饰符

目录 1 使用typeof注释 2 只读修饰符 readonly 2.1 在类中使用 2.2 在接口中使用 2.3 在很多的地方都能使用 1 使用typeof注释 比如我就像传入像 p 这个变量的样子的参数 如果你给的不是这个样子的就会报错 也可以这样用 ts中的typeof后面不能跟未定义返回值类型的…

金融学复习博迪(第1-5章)

第一部分 金融和金融体系 第1章 金融学 金融&#xff1a;资金的流通&#xff0c;即储蓄&#xff0c;信贷、汇兑、股票和证券交易等经济活动的总称。 金融学&#xff1a;研究货币流通的学问。 传统的金融学研究领域大致有两个方向&#xff1a; >宏观层面的金融市场运行理论…

k8s概念-深入pod

回到目录 工作负载&#xff08;workloads&#xff09; 工作负载&#xff08;workload&#xff09;是在kubernetes集群中运行的应用程序。无论你的工作负载是单一服务还是多个一同工作的服务构成&#xff0c;在kubernetes中都可以使用pod来运行它 workloads分为pod与control…

Android 13(T) - Media框架(2)- MediaPlayer与native的串接 libmedia

这一节学习有两个目标&#xff1a; 1 熟悉Android Media API的源码路径与调用层次 2 从MediaPlayer的创建与销毁了解与native的串接 1、源码路径 Media相关的API位于&#xff1a;frameworks/base/media/java/android/media&#xff0c;里面提供有MediaPlayer MediaCodecList M…

数据结构一轮复习 之 第二章

一、线性表&#xff08;逻辑结构&#xff09;-顺序表&#xff08;物理结构&#xff09; 操作&#xff1a; 静态分配&#xff1a;ElemType data[Lenght] 动态分配&#xff08;空间可扩充&#xff1a;新开辟一个更大的空间&#xff0c;并移动原数据&#xff09;&#xff1a;Ele…

【机器学习】西瓜书学习心得及课后习题参考答案—第5章神经网络

5.1神经元模型——这是神经网络中最基本的成分。 5.2感知机与多层网络——由简单的感知机循序渐进引出多层前馈神经网络。 5.3误差逆传播算法——BP算法&#xff0c;迄今最成功的神经网络学习算法。算法如下&#xff08;公式参考西瓜书&#xff09; 停止条件与缓解BP过拟合的…

与“云”共舞,联想凌拓的新科技与新突破

伴随着数字经济的高速发展&#xff0c;IT信息技术在数字中国建设中起到的驱动和支撑作用也愈发凸显。特别是2023年人工智能和ChatGPT在全球的持续火爆&#xff0c;更是为整个IT产业注入了澎湃动力。那么面对日新月异的IT信息技术&#xff0c;再结合疫情之后截然不同的经济环境和…

【Redis】内存数据库Redis进阶(Redis持久化)

目录 分布式缓存 Redis 四大问题Redis 持久化RDB (Redis DataBase)RDB执行时机RDB启动方式——save指令save指令相关配置save指令工作原理save配置自动执行 RDB启动方式——bgsave指令bgsave指令相关配置bgsave指令工作原理 RDB三种启动方式对比RDB特殊启动形式RDB优点与缺点 A…

2023年的深度学习入门指南(23) - ChatGLM2

2023年的深度学习入门指南(23) - ChatGLM2 在《在你的电脑上运行大模型》这一节&#xff0c;我们曾经介绍过ChatGLM模型&#xff0c;它是当时最好的中文大模型之一。现在&#xff0c;它又更新到了第二代&#xff0c;即ChatGLM2。 当时&#xff0c;我们的技术储备还不足&#…

selenium 遇到更新chorme驱动

打开浏览器,在地址栏输入chrome://version/便可以查看到谷歌当前的版本号 谷歌浏览器驱动的下载网址 http://chromedriver.storage.googleapis.com/index.htmlhttp://chromedriver.storage.googleapis.com/index.html 解压后把chromedriver.exe 放到python安装的目录下&am…

3.netty和protobuf

1.ChannelGroup可以免遍历由netty提供,覆盖remove方法即可触发删除channel\ 2.群聊私聊 13.群聊私聊简单原理图 3.netty心跳检测机制,客户端对服务器有没有读写(读,写空闲) //IdleStateHandler(3,5,7,TimeUnite.SECONDS)是netty提供的检测状态的处理器,也加到pipeline,读,写,…

Windows下FreeImage库的配置

首先下载FreeImage库&#xff0c;http://freeimage.sourceforge.net/download.html&#xff0c;官网下载如下&#xff1a; 内部下载地址&#xff1a;https://download.csdn.net/download/qq_36314864/88140305 解压后&#xff0c;打开FreeImage.2017.sln&#xff0c;如果是vs…

【 Redis】的乱码问题

问题描述&#xff1a; 使用RedisTemplate存储的数据&#xff0c;在 redis-cli 客户端查看时&#xff0c;key 和 value 都会携带类似\xac\xad\这样的字符串。 原因&#xff1a; 由于默认使用了 jdk 的序列化方式。以下是支持的序列化方式 项目一般都会有缓存&#xff0c;常常…

Python人工智能在气象中怎样应用?

Python是功能强大、免费、开源&#xff0c;实现面向对象的编程语言&#xff0c;在数据处理、科学计算、数学建模、数据挖掘和数据可视化方面具备优异的性能&#xff0c;这些优势使得Python在气象、海洋、地理、气候、水文和生态等地学领域的科研和工程项目中得到广泛应用。可以…

软件安全测试和渗透测试的区别在哪?安全测试报告有什么作用?

软件安全测试和渗透测试在软件开发过程中扮演着不同的角色&#xff0c;同时也有不同的特点和目标。了解这些区别对于软件开发和测试人员来说非常重要。本文将介绍软件安全测试和渗透测试的区别&#xff0c;以及安全测试报告在软件开发和测试过程中的作用。 一、 软件安全测试和…

【《概率图模型原理与应用:第2版》——概率机器学习与人工智能可解释性领域不可多得的著作】

《概率图模型原理与应用&#xff1a;第2版》反映了PGM的理论基础与进展。取材精炼&#xff0c;层次分明&#xff0c;是一-本很好的关于PGM的专业书籍。同时结合了大量的案例分析与代码算例,使得初学者能快速掌握前沿的PGM理论。本书的翻译与出版能进一步推进国内 人工智能算法领…

Vue3 element-plus表单嵌套表格实现动态表单验证

Vue3结合element-plus表单项可以动态添加/删除 部分效果图如下&#xff1a; 另表格有添加和删除按钮&#xff0c;点击提交进行表单验证。 首先data格式必须是对象包裹数组 import { ref, reactive } from vue; import { FormInstance } from element-plus const froms re…

盘点16个.Net开源项目

今天一起盘点下&#xff0c;16个.Net开源项目&#xff0c;有博客、商城、WPF和WinForm控件、企业框架等。&#xff08;点击标题&#xff0c;查看详情&#xff09; 一、一套包含16个开源WPF组件的套件 项目简介 这是基于WPF开发的&#xff0c;为开发人员提供了一组方便使用自…

华为云hcip核心知识笔记(数据库服务规划)

华为云hcip核心知识笔记&#xff08;数据库服务规划&#xff09; 1.云数据接库优势 1.1云数据库优点有&#xff1a; 易用性强&#xff1a;能欧快速部署和运行 高扩展&#xff1a;开放式架构和云计算存储分离 低成本&#xff1a;按需使用&#xff0c;成本更加低廉 2.云数据库r…

nmake编译Qt第三方库出现无法打开包含文件type_traits

最近需要为个人项目ShaderLab添加内嵌的代码编辑窗口功能&#xff0c;支持语法高亮和Intellisense&#xff0c;最初使用了QCodeEditor,发现这个第三方的库对词法分析的实现效果不太行. 代码换行后直接缩进到首行&#xff0c;无法定位到前一句的首行 考虑换QScintilla&#xff…