uniapp视频层级问题

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

uniapp视频层级影响页面问题

需求:底部操作框在最高层级

问题:视频遮挡住了操作框

参考博客-video标签层级问题
uni-app video层级问题,uni-app开发日记,uni-app

官方文档说明

uni-app video层级问题,uni-app开发日记,uni-app

解决①:使用cover-view

参考文档-cover-view

1. 使用方式:在需要覆盖的video里面使用
// videoZindex1-coverView.vue页面
<video src="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/2minute-demo.mp4" 
style="width: 100%;position: relative;">
	<cover-view class="cover-box">
		<cover-view>覆盖的内容</cover-view>
	</cover-view>
</video>
// 样式
<style lang="less" scoped>
	.cover-box {
		position: fixed;
		bottom: 0;
		width: 100%;
		height: 120rpx;
		background-color: yellow;
	}
</style>
2. 最终效果

只能子绝父相覆盖视频,fixed固定定位仍然不能覆盖视频,不符合我的需求
uni-app video层级问题,uni-app开发日记,uni-app

解决②:使用plus.nativeObj.view

参考文档-原生控件-View

1. 使用方式
// videoZindex2-plus.vue页面
<script>
	export default {
		data() {
			return {
				optionView: null
			}
		},
		onLoad() {
			// 这里我的高度统一是120rpx,但是plus不能用rpx,所以需要算一下
			let rpxUnit = 1
			uni.getSystemInfo({
				success: (info) => {
					rpxUnit = info.screenWidth / 750
				}
			});
			this.optionView = new plus.nativeObj.View("option-view", {
				position: "dock",
				dock: "bottom",
				width: "100%",
				height: `${rpxUnit*120}px`,
				bottom: 0,
				backgroundColor: "#fff",
			}, [{
				id: "rect-id",
				tag: "rect",
				color: "#f98d2b",
				position: {
					top: `${rpxUnit*20}px`,
					bottom: `${rpxUnit*20}px`,
					left: `${rpxUnit*225}px`,
					right: `${rpxUnit*225}px`,
				},
				rectStyles: {
					radius: `${rpxUnit*40}px`
				}
			}, {
				id: 'font-id',
				tag: 'font',
				text: '操作',
				position: {
					top: `${rpxUnit*20}px`,
					bottom: `${rpxUnit*20}px`,
					left: `${rpxUnit*225}px`,
					right: `${rpxUnit*225}px`,
				},
				textStyles: {
					align: "center",
					color: "#fff",
					size: '18px'
				}
			}]);
			this.optionView.show()
		},
		onUnload(){
			this.optionView.close()
		},
		methods: {

		}
	}
</script>
2. 最终结果
  1. 层级最高,退出页面前需要关闭。
  2. 渲染到页面上的是一块画布,无法进行精准的按钮点击交互。
  3. 标签书写动态样式难度较大。
    uni-app video层级问题,uni-app开发日记,uni-app

解决③:使用subNVue(最终采取)

参考文档-原生子窗体
参考文档-subNvue使用
uni-app video层级问题,uni-app开发日记,uni-app

1. 新建subNvue子窗体

uni-app video层级问题,uni-app开发日记,uni-app

2. 使用原生子窗体的pages.json配置

uni-app video层级问题,uni-app开发日记,uni-app

3. 使用subNvue子窗体

这里我需要一直显示,在页面加载的时候就显示,实际上这个子窗体可以在任何时机显示和隐藏。

	onLoad() {
		const subNvue = uni.getSubNVueById("bottom-fixed-operation-box")
		subNvue.show("none", 0, () => {})
	},
4. 书写subNvue子窗体
// operation.nvue子窗体页面
<template>
	<view class="operation-box">
		<button class="btn-self" @click="operationFun">
			<text class="font-box">操作</text>
		</button>
	</view>
</template>

<script>
	export default {
		onLoad() {
			uni.$on("back",(e)=>{
				console.log("监听页面事件",e);
			})
		},
		methods: {
			operationFun(){
				console.log("点击");
				uni.$emit('bottom-fixed-operation-box',"参数")
			}
		}
	}
</script>

<style scoped>
	.operation-box {
		display: flex;
		flex-direction: row;
		justify-content: space-around;
		align-items: center;
		width: 749rpx;
		height: 119rpx;
		background-color: #fff;
	}

	.btn-self {
		width: 300rpx;
		height: 80rpx;
		background-color: #f98d2b;
		border-radius: 50px;
		margin: 0;
	}

	.font-box {
		color: #fff;
		font-size: 28rpx;
		line-height: 80rpx;
	}
</style>
// videoZindex3-subNvue.vue 使用子窗体的页面
<template>
	<view style="padding: 0 50rpx;">
		<view v-for="item in 10" :key="item" style="height: 100rpx;background-color: pink;">
			其它内容
		</view>
		<video src="https://qiniu-web-assets.dcloud.net.cn/unidoc/zh/2minute-demo.mp4" style="width: 100%;"></video>
		<view v-for="item in 5" :key="item" style="height: 100rpx;background-color: pink;">
			其它内容
		</view>
	</view>
	<!-- <view class="seat"> </view>
	<view class="button-box">
		<button class="btn-self">操作</button>
	</view> -->
</template>

<script>
	export default {
		data() {
			return {

			}
		},
		onLoad() {
			const subNvue = uni.getSubNVueById("bottom-fixed-operation-box")
			subNvue.show("none", 0, () => {})
			uni.$on("bottom-fixed-operation-box", (e) => {
				console.log("参数",e);
				this.operationFun()
			})
		},
		mounted() {
			uni.$emit("back","发送给子窗体的参数")
		},
		methods: {
			operationFun() {
				console.log("页面获取到了子窗体的点击事件,继续其它操作。");
			}
		}
	}
</script>

<style lang="less" scoped>
	.seat {
		height: 120rpx;
	}

	.button-box {
		display: flex;
		justify-content: space-around;
		position: fixed;
		bottom: 0;
		width: 100%;
		color: #666;
		font-size: 28rpx;
		background-color: #fff;
		background-color: yellow;
		padding: 20rpx 40rpx;
		box-shadow: 1px 2px 30px rgba(0, 0, 0, 0.2);
		box-sizing: border-box;
		z-index: 10;

		.btn-self {
			width: 40%;
			height: 80rpx;
			color: #fff;
			font-size: 28rpx;
			line-height: 80rpx;
			background-color: #f98d2b;
			border-radius: 50px;
			margin: 0;
		}
	}
</style>
5. 子窗体通讯:全局自定义事件

可以在页面的vue文件发送事件,子窗口nvue文件监听;
也可以在子窗口nvue文件发送事件,页面vue文件监听

发送:

uni.$emit('bottom-fixed-operation-box',"参数")

接收:

uni.$on("bottom-fixed-operation-box", (e) => {
	console.log("参数",e);
	// 响应后的其它操作
})
6. 最终效果:底部操作层级比视频高,符合需求

uni-app video层级问题,uni-app开发日记,uni-app

7. 踩坑总结
  1. 在vue页面自定义监听事件需要在离开页面前移除,即uni.$on("your-event")uni.$off("your-event")需要搭配使用,否则再次进入页面时,触发事件时会多次执行$on里的操作。
// 举例:
uni.$on("bottom-fixed-operation-box", (e) => {
	uni.navigateTo({
		url: '/pages/...'
	})
})
// 结果:多次进入页面时候触发此事件会进行多次页面跳转
  1. subNvue子窗体向vue页面传递数据异常
    这里我的需求是动态显示一个或两个操作按钮,但是在onLoad()里的uni.$on似乎比其它代码都优先执行,uni.$off也不生效,重复进入页面仍会多次接收uni.$emit的触发事件,无法实现动态交互。
    但是项目需要这个功能,没办法,调试两天无果后,只能写两个原生子窗口,动态决定显示哪个。

我的demo

demo的gitee地址文章来源地址https://www.toymoban.com/news/detail-846861.html

到了这里,关于uniapp视频层级问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • HBuilderX使用uniapp中的video标签开发视频应用APP,出现视频覆盖<view>图层无法遮住等问题如何解决?

    请使用cover-image或cover-view cover-image | uni-app官网 https://uniapp.dcloud.net.cn/component/cover-image.html#cover-image   cover-view | uni-app官网 https://uniapp.dcloud.net.cn/component/cover-view.html#cover-view 情况1:如上图,注意要使用以下位置才能达到遮住的效果   情况2:如上图,就直接用cover-view自定义一

    2024年02月16日
    浏览(62)
  • uniapp-app视频层级过高问题

    使用v-html动态渲染 参考:uniapp video app端层级过高的问题,滑动渲染问题。_video在app端层级过高-CSDN博客 有想过使用原生,但是太麻烦了,然后换成了弹窗播放,但是动态的src播放失败,错误提示: chunk-vendors.js:14882 Uncaught (in promise) DOMException: The element has no supported sources.  

    2024年01月21日
    浏览(74)
  • 【uniapp】 video视频层级、遮挡其他弹窗或顶部导航 使用nvue覆盖

    uniapp 顶部导航和弹窗被video遮挡解决办法 全部代码 请前往dcloud 视频播放器 解决video视频遮挡顶部导航、 遮挡分享弹窗 组件层级 下载 话不多说 直接来干货 示例图片: 第一步:配置 subNVues 第二步:分别在index文件夹下建立三个文件分别为:index.vue 、drawer.nvue、subnvue.nvue文件

    2024年02月12日
    浏览(63)
  • 在 WebStorm 中开发 uni-app - 用vue2实现手机APP(apk) + 微信小程序项目开发方案 webstorm开发的uniapp + hbuilderx进行app 小程序打包

    我们主要分析了如下小程序开发框架,主要包括: 框架 技术栈 案例 微信小程序 支付宝小程序 百度小程序 头条小程序 H5 App uni-app Vue 丰富 ⭕ ⭕️ ⭕️ ⭕ ⭕️ ⭕ Taro React 丰富 ⭕ ⭕ ⭕ ⭕ ⭕ ⭕ wepy Vue 丰富 ⭕ ❌ ❌ ❌ ❌ ❌ mpvue Vue 丰富 ⭕ ❌ ❌ ❌ ⭕️ ❌  首先,就要排

    2024年02月05日
    浏览(97)
  • 在 WebStorm 中开发 uni-app - 用vue2实现手机APP(apk) + 微信小程序项目开发方案 webstorm开发的uniapp + hbuilderx进行app 小程序打包

    我们主要分析了如下小程序开发框架,主要包括: 框架 技术栈 案例 微信小程序 支付宝小程序 百度小程序 头条小程序 H5 App uni-app Vue 丰富 ⭕ ⭕️ ⭕️ ⭕ ⭕️ ⭕ Taro React 丰富 ⭕ ⭕ ⭕ ⭕ ⭕ ⭕ wepy Vue 丰富 ⭕ ❌ ❌ ❌ ❌ ❌ mpvue Vue 丰富 ⭕ ❌ ❌ ❌ ⭕️ ❌  首先,就要排

    2023年04月15日
    浏览(81)
  • 【Uni-App】uview 开发多端应用,密码显示隐藏功能不生效问题

    出现的问题: 使用uview组件u-input框密码绑定时会出现右侧密码显隐图标不显示的问题 思路: 1.看了下uview源码,发现这有一段注释,我们需要把源码修改一下,问题出在这里    这行代码修改为  :password=\\\"password || type === \\\'password\\\' || false\\\" 2.其次发现uview源码里面并没有密码显隐

    2024年02月13日
    浏览(62)
  • uni-app+vue3+vite+微信小程序开发的问题点

    目录名称不能为api,否则会出现 ├F10: PM┤ [vite] getaddrinfo ENOTFOUND rivtrust.jz-xxx.xyz ,修改为_api; vue3的全局变量挂载 或者 全局变量的引入: 或者 axios在微信小程序上使用的问题: 安装模块 出现adapter is not a function的解决方法 需要axios自定义适配器配置 整体代码request.js: un

    2024年02月13日
    浏览(81)
  • 【uni-app】微信小程序开发 node_modules 模块丢失问题

     解决问题 重要的问题说三遍!!! 解决 HBuilderX 打包 uni-app 项目到微信小程序时,node_modules 文件夹丢失问题。 解决 HBuilderX 打包 uni-app 项目到微信小程序时,node_modules 文件夹丢失问题。 解决 HBuilderX 打包 uni-app 项目到微信小程序时,node_modules 文件夹丢失问题。 一、uni-a

    2024年02月11日
    浏览(56)
  • WebStorm开发uni-app ,用vue2实现手机APP(apk) + 微信小程序多端项目开发方案 webstorm开发的uniapp + hbuilderx进行app 小程序打包

    我们主要分析了如下小程序开发框架,主要包括: 框架 技术栈 案例 微信小程序 支付宝小程序 百度小程序 头条小程序 H5 App uni-app Vue 丰富 ⭕ ⭕️ ⭕️ ⭕ ⭕️ ⭕ Taro React 丰富 ⭕ ⭕ ⭕ ⭕ ⭕ ⭕ wepy Vue 丰富 ⭕ ❌ ❌ ❌ ❌ ❌ mpvue Vue 丰富 ⭕ ❌ ❌ ❌ ⭕️ ❌  首先,就要排

    2024年02月11日
    浏览(75)
  • 『UniApp』uni-app-打包成App

    大家好,我是 BNTang, 在上一节文章中,我给大家详细的介绍了如何将我开发好的项目打包为微信小程序并且发布到微信小程序商店 趁热打铁,在来一篇文章,给大家详细的介绍如何将项目打包成APP。 打包 App 也是一样的,首先需要配置关于 App 应用的基础信息,打开 manifest

    2024年02月04日
    浏览(108)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包