uniapp手机端video标签层级过高问题

当我们想以视频作为背景时,其他dom通过定位显示在视频上方,h5页面上调试发现可以正常使用,效果如下:

当放在手机上看,会发现,仅仅剩一个视频,本应在视频上层的元素不见了。

经过一番排查,发现是video的层级相当高,而尝试改改zIndex的方法均失效了。因此针对这种特殊情况,总结了一下几种方法可供尝试:

start 👇

方法1(官网标签):

用uniapp官方提供的cover-view、cover-image标签实现效果:

<view class="outter"><video src="../../static/超小视频.mp4" :autoplay="true" :loop="true" :muted="true" :controls="false" style="width: 100vw; height: 100vw"><cover-view class="video_menu"><cover-view>hello video</cover-view><cover-view style="margin-top: 50rpx;" class="button">hi</cover-view></cover-view></video>
</view>
.button {width: calc(100% - 60rpx);text-align: center;background-color: #fff;padding: 10rpx 20rpx;color: #000;border-radius: 8rpx;
}

效果:

方法1局限性:只能使用cover-view与cover-image标签,不适用于复杂的页面结构。

方法2(subNVue):

使用subNVue 原生子窗体解决该问题:

官方参考:uni-app subNVue 原生子窗体开发指南 - DCloud问答

1.在当前页面的同级创建subNVue目录,目录中添加nvue文件,用于书写视频上层的内容

2.在pages.json文件中的页面(本例子中的页面名是video)的style中对subNVue进行注册,参考如下,注意id要唯一,后面要使用:

{"path": "pages/video/video","style": {"navigationBarTitleText": "uni-app","app-plus": {  "subNVues":[{  "id": "myMenu", // 唯一标识  "path": "pages/video/subNVue/myMenu", // 页面路径  "style": {  "position": "absolute",  "dock": "right",  "width": "500rpx",  "height": "300rpx","left": "120rpx","top": "500rpx", "background": "transparent"}  }]  } }
}

3.在创建的nvue文件中,书写要展示的内容,并在钩子函数中调用展示的方法。

myMenu.nvue内容参考如下:

<template><view class="video_menu"><!-- 字体颜色nvue中无法继承,需要单独写一下 --><text class="video_text">hello video</text><button style="margin-top: 50rpx;" class="button">hi</button></view>
</template>
<script>export default {onReady() {const subNVue = uni.getSubNVueById('myMenu');subNVue.show('slide-in-left', 300, function(){  // 可在打开后进行一些操作...  //   });  }}
</script>
<style>.video_menu {background-color: rgba(0, 0, 0, 0.5);font-size: 32rpx;font-weight: 600;padding: 30rpx;}.video_text {color: #ffffff;}
</style>

4.进行好以上操作,无需在video.vue中做任何操作,该subNVue弹窗便可超过在页面中展示出来,效果同上。

方法3(原生画布):

plus.nativeObj.View()原生画布:

(ps:这种方法不适用于pc端,因此需要手机进行调试,pc端会报 ReferenceError: plus is not defined)

此方法貌似适用于无交互的图形、文字、图片展示;相对较为局限。

这里tag对应的font为字体,img为图片,rect为矩形。

详细相关配置项可参考:HTML5+ API Reference

onLoad() {this.view = new plus.nativeObj.View('video_menu',{top: '120px', // 下面均可用变量控制left: '20px',width: '320px',height: '200px',backgroundColor: 'rgba(0, 0, 0, 0.5)',padding: '30px'},[{tag: 'font',text: 'hello video',position:{top:'30px',left:'30px',height:'50px',},textStyles: {color: '#fff',size: '32px',align: 'left'}},{tag:'rect',color:'#fff',position:{top:'100px',left:'30px',width:'80%',height:'50px',},},{tag: 'font',text: 'hi',position:{top:'100px',left:'50px',width:'90%',height:'50px',},textStyles: {color: '#000',size: '32px',align: 'left'}},]);setTimeout(() => {this.view.show();}, 300);this.view.addEventListener('click',e => {this.view.hide();},false);
}

效果:

方法4(三方库):

最简单粗暴的方法,使用现有的第三方库dom-video-player

链接:video-player 视频播放器 html5视频播放器-解决频层级、覆盖 - DCloud 插件市场

1.下载并引入

import DomVideoPlayer from '@/components/DomVideoPlayer/DomVideoPlayer';// 。。。export default {components: {DomVideoPlayer},// 。。。

2.使用DomVideoPlayer,下方为参考:

<template><view class="outter"><!-- #ifdef H5 --><video src="https://www.runoob.com/try/demo_source/mov_bbb.mp4" :autoplay="true" :loop="true" :muted="true" :controls="false" style="width: 100vw; height: 100vw"></video><!-- #endif --><!-- #ifndef H5 --><DomVideoPlayer src="https://www.runoob.com/try/demo_source/mov_bbb.mp4"style="width: 100vw; height: 100vw":autoplay="true":controls="false":show-play-btn="false":enable-progress-gesture="false"object-fit="cover":muted="true"loop></DomVideoPlayer><!-- #endif --><view class="video_menu"><text>hello video</text><button style="margin-top: 50rpx;">hi</button></view></view>
</template>

效果:

ok!

目前了解这几种方法,当然肯定还有其他方法,欢迎大家补充~

希望本文会对您有所帮助 ^_^ ~

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

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

相关文章

【MyBatis批量更新实现】按照list传入批量更新

学习目标&#xff1a; <update id"updateModelEngineeringSpatialNode" parameterType"com.mxpt.model.manage.domain.ModelEngineeringSpatialNode">update model_engineering_spatial_node<trim prefix"SET" suffixOverrides",&…

VOFA+ 显示数据、波形

本篇&#xff0c;以最常用的串口通信作展示&#xff0c;示范如何通过VOFA显示数据波形。 一、VOFA 下载 VOFA 是一款面向嵌入式开发的上位机软件&#xff0c;专注于硬件数据实时可视化与调试。它通过高效协议&#xff08;如FireWater、JustFloat&#xff09;将原始字节流转化为…

MySQL 插入数据提示字段超出范围?一招解决 DECIMAL 类型踩坑

MySQL 插入数据提示字段超出范围&#xff1f;一招解决 DECIMAL 类型踩坑 在日常数据库操作中&#xff0c;我们经常会遇到各种字段类型相关的问题。今天就来聊聊一个常见的错误&#xff1a;插入数据时提示字段值超出范围&#xff0c;以实际案例带你搞懂 MySQL 中 DECIMAL 类型的…

一周学会Matplotlib3 Python 数据可视化-绘制误差条形图

锋哥原创的Matplotlib3 Python数据可视化视频教程&#xff1a; 2026版 Matplotlib3 Python 数据可视化 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 课程介绍 本课程讲解利用python进行数据可视化 科研绘图-Matplotlib&#xff0c;学习Matplotlib图形参数基本设置&…

JVM垃圾回收器

垃圾回收算法标记-复制缺点&#xff1a;内存利用率低&#xff0c;有一块区域无法使用。标记-清除缺点&#xff1a;1. 效率问题 (如果需要标记的对象太多&#xff0c;效率不高)2. 空间问题&#xff08;标记清除后会产生大量不连续的碎片&#xff09;标记-整理分代收集根据对象存…

科研工具的一些注意事项

Origin Origin导入数据之后&#xff0c;可以考虑 [删除数据连接器…] 导入数据之后&#xff0c;删除数据连接&#xff0c;这样当原来的文件移动之后&#xff0c;就不影响origin文件里面的数据。不然就会出现空白数据&#xff1a;当然&#xff0c;没有数据了也可以加载出来&…

美国服务器环境下Windows容器工作负载智能弹性伸缩

在北美数据中心加速数字化转型的今天&#xff0c;企业客户日益重视Windows容器工作负载的智能化管理。本文将深入探讨基于Azure Stack HCI&#xff08;混合云基础设施&#xff09;的弹性伸缩方案如何突破传统资源调度瓶颈&#xff0c;通过分析指标收集、策略配置、混合云联动三…

欧姆龙CP系列以太网通讯实现上位机与触摸屏监控

一、行业痛点在现代工业生产中&#xff0c;自动化生产线的控制系统的高效性与智能化程度对生产效率和产品质量有着至关重要的影响。然而&#xff0c;许多传统工业生产线中使用的欧姆龙CP系列系列PLC以太网模块&#xff0c;由于自身设计原因&#xff0c;并未配备以太网接口&…

【大语言模型 00】导读

【大语言模型00】导读&#xff1a;你的LLM全栈工程师进阶之路关键词&#xff1a;大语言模型、LLM、Transformer、深度学习、AI工程化、全栈开发、技术路线图摘要&#xff1a;这是一份完整的大语言模型学习指南&#xff0c;涵盖从数学基础到商业落地的200篇深度文章。无论你是AI…

Business Magic

题目描述There are n stores located along a street, numbered from 1 to n from nearest to farthest. Last month, the storek had a net profit of rk . If rk is positive, it represents a profit of rk dollars; if rk is negative, it represents a loss of −rk dolla…

在ubuntu系统上离线安装jenkins的做法

作者&#xff1a;朱金灿 来源&#xff1a;clever101的专栏 1.安装java环境和下载war包&#xff1a; Jenkins 依赖于 Java 环境&#xff08;OpenJDK 11 或更高版本&#xff09;&#xff1a; # 安装OpenJDK 11和字体依赖 sudo dpkg -i openjdk-11-jre-headless_*.deb fontconfi…

图像相似度算法汇总及Python实现

下面整理了一些图像相似度算法&#xff0c;可根据不同的需求选择不同的算法&#xff0c;对每种算法进行了简单描述并给出Python实现&#xff1a; 1. 基于像素的算法&#xff1a; (1).MSE(Mean Squared Error)&#xff1a;均方误差&#xff0c;通过计算两幅图像对应像素值差的平…

IO流与单例模式

单例模式 单例模式是指一个类只能有一个对象。 饿汉模式 在单例模式下&#xff0c;在程序开始&#xff08;main函数运行前&#xff09;的时候创建一个对象&#xff0c;这之后就不能再创建这个对象。 class HungryMan { public:static HungryMan* getinstance(){return &ins…

Java设计模式之依赖倒置原则使用举例说明

示例1&#xff1a;司机驾驶汽车 问题场景&#xff1a;司机类直接依赖奔驰车类&#xff0c;新增宝马车需修改司机类代码。 // 未遵循DIP class Benz { public void run() { /*...*/ } } class Driver { public void drive(Benz benz) { benz.run(); } } // 遵循DIP&#xff1a;…

【Docker】openEuler 使用docker-compose部署gitlab-ce

docker-compose配置 services:gitlab:image: gitlab/gitlab-ce:latestcontainer_name: gitlabrestart: alwayshostname: gitlab.example.comenvironment:GITLAB_OMNIBUS_CONFIG: |# Add any other gitlab.rb configuration here, each on its own lineexternal_url https://gi…

ElasticSearch 父子文档使用简记

一. ES parent-child 文档简介 ES 提供了类似数据库中 Join 联结的实现&#xff0c;可以通过 Join 类型的字段维护父子关系的数据&#xff0c;其父文档和子文档可以单独维护。 二. 父子文档的索引创建与数据插入 ES 父子文档的创建可以分为下面三步&#xff1a; 创建索引 M…

【Linux】编辑器vim的使用

目录 1. vim的基本概念 2. vim的基本使用 3. vim命令模式操作 3.1 移动光标 3.2 删除 3.3 复制 3.4 替换 3.5 撤销 3.6 更改 3.7 跳转 4. vim底行模式操作 4.1 列出行号 4.2 跳到文件中的某行 4.3 查找字符 4.4 保存文件 4.5 离开vim 1. vim的基本概念 Vim&…

《零基础掌握飞算Java AI:核心概念与案例解析》

前引&#xff1a;飞算科技是一家专注于企业级智能化技术服务的公司&#xff0c;核心领域包括AI、大数据、云计算等。其Java AI解决方案主要面向企业级应用开发&#xff0c;提供从数据处理到模型部署的全流程支持&#xff01;飞算Java AI是一款基于人工智能技术的Java开发辅助工…

Chrome腾讯翻译插件transmart的安装

文章目录一、官网地址二、安装过程1. 下载插件2. 解压crx3, chrome安装三、如何使用一、官网地址 腾讯翻译插件官网 二、安装过程 1. 下载插件 点击上面的官网地址&#xff0c;下拉到如图所示chrome插件位置&#xff0c;点击立即下载 2. 解压crx 从压缩文件中解压出crx文…

IOMMU的2级地址翻译机制及多级(2~5)页表查找

IOMMU的2级地址翻译机制及多级(2~5)页表查找 摘要:IOMMU是现代计算机系统中用于I/O设备(如GPU、NIC、网络接口卡)的地址翻译和保护机制,类似于CPU的MMU(Memory Management Unit),但专为设备DMA(Direct Memory Access,直接内存访问)设计。它支持虚拟化环境(…