uniapp B站iframe嵌入APP及视频全屏不横屏问题处理 Android端

文章讨论了在移动设备上处理视频全屏横屏显示的问题。通过调整pages.json文件中的页面设置允许横屏,并利用onResize事件监听窗口尺寸变化,以及在APP-PLUS环境下使用plus.screen.lockOrientation方法来锁定横屏或竖屏。这种方法在Android设备上有效,但对iOS设备需要其他解决方案。
摘要由CSDN通过智能技术生成

问题:视频界面能进入全屏,但视频不横屏

方法一:视频界面设置允许横屏,手机竖屏锁定取消。(未采用)

效果及问题:全屏后,手机横屏后,视频会横屏。但取消全屏后,视频界面还是横屏着,体验不太好。

# pages.json文件

# 对应界面设置允许横屏 "pageOrientation": :"auto"
{
    "path" : "xxxx/video",
	"style": {
		"navigationBarTitleText": "视频详情",
		"enablePullDownRefresh": true,
		"pageOrientation": "auto",
		"app-plus": {
			"bounce": "none", 
			"titleNView": {
			    "titleAlign":"left"
		    }
	     }
     }
},

方法二:视频界面设置允许横屏,通过onResize监听窗口尺寸变化(全屏生效时,标题栏会隐藏,导致窗口高度会增加;退出全屏时,标题栏会出现,导致窗口高度会减小),将界面强制设置横屏或竖屏。(采用)

效果及问题:手机竖屏锁定激活也能横屏,取消全屏后会回到竖屏。只适用于Android 端,iOS要使用其他方案,测试用的是Android 12。

# pages.json文件
#同上

# 视频详情文件video.vue
<template>
	<view class="videoPage">
		<iframe
		class="video"
		id="videoIframeId"
		:src='`https://${dtlData.videoUrl}`'
		frameborder="no"
		scrolling="no"
		border="0"
		framespacing="0"
		allowfullscreen="true"
		></iframe>
    </view>
</template>

<script>
	export default {
		data() {
			return {
				dtlData: {
					videoUrl: 'player.bilibili.com/player.html?aid=230937449&bvid=BV1c8411Q7Gd&cid=1196481814&page=1',
				},
				initHeight: 0,
				onceFlag: true,
				landscapeInitHeight: 0,
				landscapeOnceFlag: true,
			}
		},
		onLoad(options){
			// #ifdef APP-PLUS
			plus.screen.lockOrientation('portrait-primary');
			// #endif
		},
		// 监听窗口尺寸变化
		onResize(e) {
			// return
			// 总共会出现4种窗口高度
			// 竖屏时高度(例如: 799)  全屏竖屏时高度(815,隐藏了页面标题部分)  全屏横屏时高度(313)  退出全屏横屏时高度(297,露出了页面标题部分)

			// #ifdef APP-PLUS
				const windowHeight = e.size.windowHeight // windowHeight不包含NavigationBar和TabBar的高度(即不包含状态栏、页面标题部分外的高度)
				// 首次进入竖屏界面时需记录一下 窗口高度(竖屏时高度)
				if (this.onceFlag) {
					this.onceFlag = false
					this.initHeight = windowHeight
				}

				const deviceLandscapeFlag = e.deviceOrientation === 'landscape'
				// 首次进入全屏(横屏)时记录一下 窗口高度(全屏横屏时高度)
				// 进行竖屏-->横屏的动作时,高度变化 799-->815-->313
				if (this.landscapeOnceFlag && deviceLandscapeFlag) {
					this.landscapeOnceFlag = false
					this.landscapeInitHeight = windowHeight
				}
				console.log(windowHeight, this.initHeight, this.landscapeInitHeight, 77);
				// windowHeight === this.initHeight  当前窗口高度 === 初始竖屏窗口高度 则表示进入了竖屏状态
				// deviceLandscapeFlag && windowHeight < this.landscapeInitHeight  为退出全屏横屏状态(即露出了页面标题部分,高度:313-->297)
				if (windowHeight === this.initHeight || (deviceLandscapeFlag && windowHeight < this.landscapeInitHeight)) {
					plus.screen.lockOrientation('portrait-primary');
					return
				}
				plus.screen.lockOrientation('landscape-primary'); //锁定横屏
			// #endif
		},
		onUnload(){
			// #ifdef APP-PLUS
			plus.screen.lockOrientation('portrait-primary'); //锁死屏幕方向为竖屏
			// #endif
		},
		methods: {
		}
	}
</script>

<style lang="scss" scoped>
.videoPage {
	position: relative;
	padding-bottom: 70%;
}
.video {
	position: absolute;
	width: 100%;
	height: 100%;
	left: 0;
	top: 0;
}
</style>

部分效果图:

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值