uniapp video播放视频 悬浮在屏幕无法滑动

news2024/9/27 15:22:52

背景:

在uniapp中,需要使用<video></video>标签进行播放动态src的视频。

1.在开发的时候,运行到浏览器,vedio标签正常;(使用HbuildX运行,运行 -->运行到浏览器)。

2.但是在打包成原生App,安装.apk后缀的应用程序,vedio播放视频就不正常。(使用HbuildX打包,发行 --> 原生App-云打包)。

问题截图:

问题描述:在App上,视频停在屏幕上,在页面中不会跟随页面滚动而滚动。

问题分析:

1.研究<video>标签,是否某个属性设置错误;

2.给对应的video标签添加上对应的css样式,是否是样式问题;

3.查看uniapp框架。因为在谷歌浏览器播放视频都是正常的,到手机上不正常,查看uniapp框架相关。

4.搜索相关博客,解决问题。

一、video标签

官网:点击跳转官网

1.基本用法属性:

  • id: 给视频标签一个唯一的 ID。
  • class: 用于样式控制。
  • src: 视频的 URL,可以是本地路径或者网络地址。
  • controls: 显示默认的视频控件。
  • autoplay: 自动播放视频。
  • loop: 循环播放视频。
  • muted: 静音播放视频

 2.事件监听

  • @start: 监听视频播放事件。
  • @pause: 监听视频暂停事件。
  • @finish: 监听视频播放结束事件。

备注:浏览uniapp框架下的video标签,发现没有属性能够控制其保持在电子屏幕不动。、

进一步说明这个是手机端才有的Bug 

二、video标签的css样式

在某些情况下,视频可能会被固定在屏幕上,而不是随着页面滚动。这可能是由于视频元素的层级或样式问题。可以尝试以下方法:

确保视频的样式设置正确,使其能够随着页面滚动。

<template>
  <view class="container">
    <video
      id="myVideo"
      class="video"
      src="/static/videos/your-video.mp4"
      controls
      autoplay
      loop
      muted
      preload="auto"
      x5-video-player-type="h5"
      x5-video-player-fullscreen="true"
      x5-playsinline
      playsinline
      webkit-playsinline
    ></video>
  </view>
</template>

<style>
.container {
  width: 100%;
  height: 300px;
  background-color: #f0f0f0;
  overflow: hidden; /* 确保容器能够滚动 */
}

.video {
  width: 100%;
  height: 100%;
  object-fit: cover;
  position: relative; /* 确保视频能够随页面滚动 */
}
</style>

在某些设备上,硬件加速或渲染层可能导致视频渲染问题。可以尝试禁用硬件加速或调整渲染层设置: 

<template>
  <view class="container">
    <video
      id="myVideo"
      class="video"
      src="/static/videos/your-video.mp4"
      controls
      autoplay
      loop
      muted
      preload="auto"
      x5-video-player-type="h5"
      x5-video-player-fullscreen="true"
      x5-playsinline
      playsinline
      webkit-playsinline
    ></video>
  </view>
</template>

<style>
.container {
  width: 100%;
  height: 300px;
  background-color: #f0f0f0;
  overflow: hidden; /* 确保容器能够滚动 */
}

.video {
  width: 100%;
  height: 100%;
  object-fit: cover;
  position: relative; /* 确保视频能够随页面滚动 */
  will-change: transform; /* 提示浏览器优化渲染 */
  transform: translateZ(0); /* 强制开启 GPU 加速 */
}
</style>

备注:

我使用了对应的css样式,但是问题没有解决。 

三、uniapp框架下的video标签

查看了uniapp框架下的video标签,但是没有对应的属性能够解决问题。

四、vedio原生组件层级高于前端组件

意思是: 

1.Video是属于原生组件的,层级是最高的,无法被其他内容所覆盖,当然也不会跟着div的overflow-y:scroll进行滑动,只会一直浮在表层,挡住其他元素。

2.部分组件如map、video、textarea、canvas通过原生控件实现,原生组件层级高于前端组件(类似flash层级高于div)。

为了能正常覆盖原生组件,设计了cover-view。


uni官网的官方文档:点击跳转官网

cover-view使用示例:

//cover-view标签得在<video>标签内部
<template>
	<view>
		<video style="position: relative;" src="https://haokan.baidu.com/v?pd=wisenatural&vid=18309277609015821003">
<cover-view style="width: 100px;height: 100px;background-color: 
      #fff;position:absolute;left: 0;">
</cover-view>
		</video>
	</view>
</template>
 
<script>
	export default {
		data() {
			return {
				
			}
		},
		methods: {
			
		}
	}
</script>
 
<style>
 
</style>

cover-view使用的问题:

uni-app 原生APP 模式下 video 层级过高,页面滚动后会覆盖自定义顶部 tabbar和自定义底部菜单,很多人都只是说 cover-view 覆盖,但是cover-view必须在video里面才是有效的,cover-view 在原生app里面无法嵌套内容 。

vue页面层级覆盖解决方案: 点击跳转官网

三种方式对比: 

1.cover-view

更适合在视频上边添加某些组件,比如播放按钮或者什么功能。

cover-view或者cover-image,放在video标签内使用,子绝父相

2.plus.nativeObj.view

这个是安卓的原生写法,看了很多资料,发现是能解决相当多种类的问题,但是毕竟原生语法会难一些,在时间不够的情况下很难去学好怎么使用原生语言满足当前的需求,但如果时间充足且有条件的基础下可以采用这个方法 。

plus.nativeObj.View()  绘制原生画布,有点击事件。不属于dom,可以覆盖webview和各种原生控件

plus.nativeObj.view官方文档。因为偏原生组件,较复杂,可自行选择学习

Html5产业联盟。关于video标签的相关文档

3.subNVue

subNVue是原生渲染的nvue子窗体,把一个nvue页面以半屏的方式覆盖在vue页面上

subnvue 创建原生子窗体,放在当前页面下,放好位置即可。

首先创建nvue文件。最好放入同级。

在 pages.json 中,新增了 subNVues 节点,配置 subNVue 子窗体的相关属性。

在 pages.json 中增加完配置,也写好了 subNVue 子窗体,接下来就是在 vue/nvue 页面中使用了。

uni-app subNVue 原生子窗体开发指南

参考博客:参考博客 

五、video标签一个解决办法 

最后在网上参考了其他人的一份解决方案,刚好解决此问题。

封装一个组件,利用iframe实现:

//MyVideo组件
//自行封装一个组件,利用iframe实现
<template>
	<iframe :onload="onloadCode" style="width:100%;height:100%;border:1px solid #fff;background: #000;"></iframe>
</template>
<script>
	export default {
		props: {
			src: {}
		},
		data() {
			return {
				onloadCode: ''
			}
		},
		created() {
			this.onloadCode =
				`this.contentWindow.document.body.innerHTML = '<video style="width: 100%;height: 100%" controls="controls" src="${this.src}"></video>';`
		},
	}
</script>
<style lang="scss">
</style>

使用方式:

在其他页面调用注册此封装的组件,并传递视频资源src 

//其它页面调用
<MyVideo :src="item.img" v-for="(item, index) in vediosData" :key="index" class="video"></MyVideo>

 写在最后,我们这里只是简单的在App端播放视频,且动态赋值src。如果还有其它复杂的布局内部嵌套video标签也是不成功的,例如:<swiper>、<scroll-view>等

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

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

相关文章

【数据结构】栈篇

文章目录 1. 栈2. 栈的实现2.1 准备工作2.2 栈的初始化2.3 入栈2.4 出栈2.5 判断栈是否为空2.6 取出栈顶元素2.7 获取栈中有效元素个数2.8 销毁栈效果图 3.代码整合 1. 栈 栈是一种特殊的线性表&#xff0c;其只允许固定一端进行插入和删除元素操作。进行数据的插入和删除操作的…

qt项目之在线考试系统----------MVC使用模型-视图-控制器

1、什么是MVC的设计模式 在Qt中,MVC是一种设计模式,全称为Model-View-Controller(模型-视图-控制器)。这是一个经典的设计模式,用于将数据表示(Model)、用户界面(View)和业务逻辑(Controller)分离。具体来说,MVC设计模式在Qt中的应用如下: Model(模型):表示应用…

C++之从C过渡(下)

C之从C过渡&#xff08;下&#xff09; 接着上一篇&#xff0c;从引用开始往下讲解。 引用的特性 引⽤在定义时必须初始化⼀个变量可以有多个引⽤引⽤⼀旦引⽤⼀个实体&#xff0c;再不能引⽤其他实体 C的引用不能完全替代指针。比如&#xff0c;在链表结点中我们会存储指向下…

2024下半年EI收录的老牌会议,检索超快!

在科研领域&#xff0c;EI作为全球公认的工程技术领域重要检索工具&#xff0c;其收录的会议论文往往代表着某一领域内的最新研究成果与前沿技术。对于广大科研工作者而言&#xff0c;能够在EI收录的老牌会议上发表论文&#xff0c;不仅是对自身研究能力的一种肯定&#xff0c;…

pinctrl子系统做功能的切换.

SD卡和debug口中sdmmc和uart共用同一组pin脚,需实现在sd使用的时候切换到sdmmc不插入sd卡的时候使用debug口功能。 sd卡有检测脚可以作为切换的标志所以我们的切换要在sd卡的驱动中去做。 第一步&#xff1a; 使能俩个功能的dts并去除不能切换的pinctrl&#xff0c;只有一个节点…

自动回复的AI小助手,人工智能还是人工智障

最近在运营公司的百家号账号。因为老杨和同事们在一些大会上有干货满满的演讲&#xff0c;我们将它剪辑成比较短的视频&#xff0c;放在一些平台上供大家观看。百家号因百度的关系&#xff0c;搜索的引流会好一些。 一开始每次发好视频&#xff0c;就会有播放量。几次之后&…

Java每日一题———删除有序数组中的重复项

这个问题可以通过使用双指针技术来解决。我们可以使用两个指针&#xff0c;一个慢指针 slowRunner 用于跟踪新数组的末尾&#xff0c;另一个快指针 fastRunner 用于遍历数组。每当 fastRunner 遇到一个新的唯一元素时&#xff0c;就将其复制到 slowRunner 指向的位置&#xff0…

创建谷歌外链的常见错误及避免方法!

创建谷歌外链是个技术活&#xff0c;很多人在这个过程中容易犯错。了解这些常见错误和如何避免它们可以帮助你更有效地提升你的SEO表现。 其一&#xff0c;忽视锚文本多样性。有些人在建立外链时&#xff0c;总是使用相同的锚文本&#xff0c;这看起来很不自然&#xff0c;可能…

基于python爬虫技术的bilibili网用户数据采集系统的设计与实现-计算机毕业设计源码55962

摘要 在当今信息爆炸的时代&#xff0c;互联网已经成为人们获取信息、交流思想的重要平台。作为国内领先的弹幕视频网站&#xff0c;Bilibili凭借其独特的弹幕文化和丰富的内容生态&#xff0c;吸引了亿万用户的关注。这些用户生成的海量数据蕴含着丰富的信息&#xff0c;对于理…

异常(Java)

目录 1. 异常的概念 2. 异常的分类 3. 异常的处理 4. 异常的抛出 5. 异常的捕获 5.1 异常声明throws 5.2 try-catch捕获并处理 5.3 finally 6. 异常的处理流程 7. 自定义异常类 1. 异常的概念 异常就是在程序执行过程中发生的不正常的行为.异常中断了正在执行程序的…

Cross-Modality Person Re-identification with Memory-Based Contrastive Embedding

文章目录 题目&#xff1a;Cross-Modality Person Re-identification with Memory-Based Contrastive Embedding&#xff08;基于记忆对比嵌入的跨模态人物再识别&#xff09;摘要论文分析网络框架1、Problem Definition&#xff08;模态预处理&#xff09;2、Learning Modalit…

RUM技术探索:前端监控数据采集与实践

​​随着互联网技术的不断演进&#xff0c;Web应用程序正日益呈现出复杂多变与高度动态性的特征。用户渴望获得快速的页面加载、流畅的交互体验以及高度的可靠性。为了满足这些&#xff0c;实时监控 Web 应用的性能和行为变得至关重要。前端监控让开发者能够深入了解应用的表现…

Hack The Box-Resource

总体思路 phar反序列化->SSH CA私钥泄露->SSH CA私钥滥用->SSH脚本滥用 信息收集&端口利用 nmap -sSVC itrc.ssg.htb目标开放了两个ssh端口和一个80端口&#xff0c;先查看80端口 网站是一个SSG IT资源中心&#xff0c;主要用于解决网站问题、管理 SSH 访问、清…

免费【2024】springboot 付费自习室管理系统的设计与实现

博主介绍&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围&#xff1a;SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…

正点原子imx6ull-mini-Linux驱动之Linux 音频驱动实验

虽然mini板子没有这个资源&#xff0c;但是可以学学移植这个软件。 音频是我们最常用到的功能&#xff0c;音频也是 linux 和安卓的重点应用场合。I.MX6ULL 带有 SAI 接口&#xff0c;正点原子的 I.MX6ULL ALPHA 开发板通过此接口外接了一个 WM8960 音频 DAC 芯片&#xff0c;…

《程序猿入职必会(10) · SpringBoot3 整合 MyBatis-Plus》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

使用samba在ubuntu和windows之间共享文件

1、在ubuntu上安装samba 在终端输入命令 sudo apt update sudo apt install samba 2、配置samba 打开samba 的配置文件 sudo nano /etc/samba/smb.conf 在文件末尾添加以下内容 [shared] path /home/lzx available yes valid users lzx read only no browsable yes…

【Redis进阶】Redis的持久化RDB和AOF

目录 持久化 RDB持久化 概念 原理 RDB 持久化的详细工作流程 1触发持久化&#xff1a; 2创建子进程&#xff1a; 3数据写入 RDB 文件&#xff1a; 4替换旧文件&#xff1a; 5回收子进程&#xff1a; RDB持久化的触发方式 1.手动触发&#xff1a; 2.自动触发&#…

鸿蒙应用服务开发【获取天气数据】

获取天气数据 介绍 Weather Service Kit&#xff08;天气服务&#xff09;是鸿蒙生态下的一个数据提供服务&#xff0c; Weather Service Kit融合了多家气象行业TOPs供应商&#xff0c;提供专业、精准、稳定的超本地化天气数据服务&#xff0c; 开发者可以通过Weather Servic…