Vue 原始(传统)或特别的视频组件具体实现方法
一、原始的播放器组件(传统的视频播放组件)
参考链接
1. Vue2视频播放(Video)
二、自定义视频播放组件,自播放,无控制模式
简单点的理解,就是没有点击就会暂停播放视频,还有忽略了音频,鼠标点击视频也不会停止,完全自循环播放,后面就是对这个视频进行灵活的前端排版了。
1. Video.vue 文件:
<template><div class="m-video" :class="{'u-video-hover': !vplay}"><videoref="veo":src="videoSrc":autoplay="autoplay":controls="!originPlay&&controls":loop="loop":muted="autoplay || muted"webkit-playsinlinex5-playsinlineplaysinlinev-bind="$attrs"@loadeddata="poster ? e => e.preventDefault():getPoster()"></video></div>
</template>
<script>
export default {name: 'Video',props: {videoSrc: { // 视频文件url,必传,支持网络地址 https 和相对地址 require('@/assets/files/Bao.mp4')type: String,required: true,default: null},videoPoster: { // 视频封面url,支持网络地址 https 和相对地址 require('@/assets/images/Bao.jpg')(在未设置封面且preload不等于none时,自动获取视频第0.3s对应帧作为封面图)type: String,default: null},width: { // 视频播放器宽度type: Number,default: 800},height: { // 视频播放器高度type: Number,default: 450},/*参考 MDN 自动播放指南:https://developer.mozilla.org/zh-CN/docs/Web/Media/Autoplay_guideAutoplay 功能据新政策,媒体内容将在满足以下至少一个的条件下自动播放:1.音频被静音或其音量设置为 02.用户和网页已有交互行为(包括点击、触摸、按下某个键等等)3.网站已被列入白名单;如果浏览器确定用户经常与媒体互动,这可能会自动发生,也可能通过首选项或其他用户界面功能手动发生4.自动播放策略应用到<iframe>或者其文档上autoplay:由于目前在最新版的Chrome浏览器(以及所有以Chromium为内核的浏览器)中,已不再允许自动播放音频和视频。就算你为video或audio标签设置了autoplay属性也一样不能自动播放!解决方法:设置视频 autoplay 时,视频必须设置为静音 muted: true 即可实现自动播放,然后用户可以使用控制栏开启声音,类似某宝商品自动播放的宣传视频逻辑*/autoplay: { // 视频就绪后是否马上播放type: Boolean,default: false},controls: { // 是否向用户显示控件,比如进度条,全屏type: Boolean,default: false},loop: { // 视频播放完成后,是否循环播放type: Boolean,default: true},muted: { // 是否静音type: Boolean,default: true},preload: { // 是否在页面加载后载入视频,如果设置了autoplay属性,则preload将被忽略;type: String,default: 'auto' // auto:一旦页面加载,则开始加载视频; metadata:当页面加载后仅加载视频的元数据 none:页面加载后不应加载视频},showPlay: { // 播放暂停时是否显示播放器中间的暂停图标type: Boolean,default: false},playWidth: { // 中间播放暂停按钮的边长type: Number,default: 96},zoom: { // video的poster默认图片和视频内容缩放规则type: String,default: 'none' // none:(默认)保存原有内容,不进行缩放; fill:不保持原有比例,内容拉伸填充整个内容容器; contain:保存原有比例,内容以包含方式缩放; cover:保存原有比例,内容以覆盖方式缩放}},data () {return {poster: this.videoPoster,originPlay: true,vplay: false}},mounted () {if (this.showPlay) {this.$refs.veo.addEventListener('pause', this.onPause)this.$refs.veo.addEventListener('playing', this.onPlaying)}if (this.autoplay) {this.vplay = truethis.originPlay = false}/*自定义设置播放速度,经测试:在vue2中需设置:this.$refs.veo.playbackRate = 2在vue3中需设置:veo.value.defaultPlaybackRate = 2*/// this.$refs.veo.playbackRate = 2},methods: {/*loadeddata 事件在媒体当前播放位置的视频帧(通常是第一帧)加载完成后触发preload为none时不会触发*/getPoster () { // 在未设置封面时,自动获取视频0.3s对应帧作为视频封面// 由于不少视频第一帧为黑屏,故设置视频开始播放时间为0.3s,即取该时刻帧作为封面图this.$refs.veo.currentTime = 0.3// 创建canvas元素const canvas = document.createElement('canvas')const ctx = canvas.getContext('2d')// canvas画图canvas.width = this.$refs.veo.videoWidthcanvas.height = this.$refs.veo.videoHeightctx.drawImage(this.$refs.veo, 0, 0, canvas.width, canvas.height)// 把canvas转成base64编码格式this.poster = canvas.toDataURL('image/png')},onPlay () {console.log('click')if (!this.autoplay) {this.vplay = truethis.originPlay = falsethis.$refs.veo.play()} else {this.$refs.veo.pause()}},onPause () {this.vplay = falseconsole.log('pause')this.$once('hook:beforeDestroy', function () {removeEventListener('pause', this.onPause)})},onPlaying () {this.vplay = trueconsole.log('playing')// 自动清理自己,避免内存泄漏this.$once('hook:beforeDestroy', function () {removeEventListener('playing', this.onPlaying)})}}
}
</script>
2. 其他组件引用该 Video.vue 文件实现方法
test.vue文件演示:
<template>...
<Video:videoSrc="videoSrc":autoplay="true":controls="false":loop="true":muted="false"preload="auto":showPlay="false"zoom="contain"/>...</template>
<script>
import Video from './testview/Video'export default {components: {Video},data() {return {videoSrc: require('../assets/videos/test.mp4'),videoPoster: require('../assets/img/picture.png'),}}}
</script>
相关文章:
Vue 原始(传统)或特别的视频组件具体实现方法
一、原始的播放器组件(传统的视频播放组件) 参考链接 1. Vue2视频播放(Video) 二、自定义视频播放组件,自播放,无控制模式 简单点的理解,就是没有点击就会暂停播放视频,还有忽略…...
香豆素荧光标记652966-03-5,ATTO425 acid,ATTO 425 羧酸,进行简析说明
中文名称:ATTO 425 羧酸 英文名称:ATTO425 COOH,ATTO-425 carboxylic acid 规格标准:10mg,25mg,50mg CAS:652966-03-5 分子式:C22H27NO6 分子量:401.46结构式:…...
linux信号量与PV操作知识点总结
信号量 信号量(semaphore) 与已经介绍过的 IPC 结构不同,它是一个计数器,信号量用于实现进程间的与斥与同步,而不是用于存储进程间通信数据。 1、特点 (1)信号量用于进程间同步,若要在进程间传递数据需要结…...
6-python中的string类型
目录 内容提要字符串截取python的转义字符 \python的字符串格式化format()的参数format()的数字格式化 字符串常用函数count()函数endwith()函数 与 startwith()函数find()函数与index()函数find()函数 ⭐index()函数 判断字符串内的字符种类函数isalnum()函数isalpha()函数isd…...
Windows系统内核溢出漏洞提权
目录 Windows内核溢出漏洞原理 溢出漏洞简介 什么是缓冲区 缓冲区溢出 缓冲区溢出目的 Windows内核溢出漏洞利用流程 提权实战思路 手工提权测试 辅助提权 EXP如何寻找 使用MSF提权 关于提权时可能遇到的问题 如果提权的时候发现无法执行命令的话,可以上…...
BlackIce病毒分析
概述 blackice是一个古老的感染型病毒,可感染系统中exe、doc和xls文件,通过USB设备和网络驱动器来传播,会向C&C下载pe执行,会关闭常用的杀软进程。下面找了一个样本,这个样本的代码结构清晰,用IDA pro…...
软件测试基础知识整理(八)- 软件缺陷
目录 一、软件缺陷 1.1 缺陷定义 1.2 缺陷判定标准 1.3 软件缺陷产生的原因 1.4 软件缺陷产生的根源 1.5 软件缺陷信息 1.5.1 缺陷状态 1.5.2 缺陷严重程度 1.5.3 缺陷优先级 1.6 缺陷报告模板 1.7 缺陷报告注意事项 1.8 缺陷跟踪流程 1.9 缺陷数据分析关注的问题 …...
有没有想过一种可能,30岁之后,转行去做IT售前?
灵魂拷问 IT行业的变化是非常迅速的,各种新技术、新产品、新观念、新的业务模式层出不穷,不仅是我们,客户也在不断地学习进步,因此我们注定要终身学习。 IT售前这个岗位为许多IT职场人提供了一种新的选择: 你不需要成为某一方面…...
基于决策树的Ensemble方法在边缘计算中的应用
随着物联网的普及,边缘计算已成为一种重要的技术手段。在边缘计算中,数据的处理和分析都是在设备端进行的,而不是通过云端进行。这种技术可以大大降低网络带宽和响应时间,从而提高了用户体验。但是,边缘设备通常受到计…...
golang常见导致panic的场景
1、越界 常见有数组越界和字符串越界 2、空指针引用 直接引用空指针结构体的字段会引发panic,但调用成员方法里如果没引用结构体的字段不会引发panic 3、断言失败 4、map操作错误 map未初始化,可读不可写。 map的value如果是结构体指针…...
Python 修改文件权限+只读后几行 can‘t do nonzero end-relative seeks
读后几行使用File Handle : seek 文件处理 # -*- coding: UTF-8 -*-# 打开文件 fo open("runoob.txt", "rw") print "文件名为: ", fo.nameline fo.readline() print "读取的数据为: %s" % (line)# 重新设置文件读取指针到开头 fo.…...
每日学术速递5.25
CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Chupa: Carving 3D Clothed Humans from Skinned Shape Priors using 2D Diffusion Probabilistic Models 标题:Chupa:使用 2D 扩散概率模型从蒙皮形状先验雕…...
GAMES202作业1
目录 Shadow MapCalcLightMVP函数useShadowMap函数Bias函数 最终效果 PCF两个采样函数PCF函数最终效果 PCSSfindBlocker函数PCSS函数最终效果 参考 先放上公式: 后面的积分项是我们在作业0中就做好的blinnphong项,我们要求的就是积分项前,等…...
Android 12.0状态栏居中显示时间和修改时间显示样式
1.概述 在12.0的系统rom定制化开发中,在systemui状态栏系统时间默认显示在左边和通知显示在一起,但是客户想修改显示位置,想显示在中间,所以就要修改SystemUI 的Clock.java 文件这个就是管理显示时间的,居中显示的话就得修改布局文件了 效果图如下: 在这里插入图片描述 …...
湍流的数值模拟方法概述
湍流,又称紊流,是一种极其复杂、极不规则、极不稳定的三维流动。湍流场内充满着尺度大小不同的旋涡,大旋涡尺度可以与整个流畅区域相当,而小漩涡尺度往往只有流场尺度千分之一的数量级,最小尺度旋涡的尺度通过其耗散掉…...
openFast中的陆上风电机组5MW_Land_DLL_WTurb参数详解
文章目录 一、openFAST是什么?二、参数截图三、参数详解 一、openFAST是什么? openFAST是一种开放源代码的工具,为风能工程师提供了用于模拟和设计风力涡轮机的框架。它可以计算风力涡轮机在各种环境条件下的性能,并提供对风力涡…...
“卷”还是“躺平”?职场人如何在工作中找到价值感?
今天不谈技术,只谈进步。 曾经看过一个回答说“职场人最好的姿势是仰卧起坐”。 卷累的就躺,休息好了再继续卷,卷是常态,“仰卧起坐”也好,“卷的姿势”也好,都是在反复“卷起”的过程中寻找一些舒适和平衡…...
《Opencv3编程入门》学习笔记—第二章
《Opencv3编程入门》学习笔记 记录一下在学习《Opencv3编程入门》这本书时遇到的问题或重要的知识点。 第二章 OpenCV 官方例程引导与赏析 openv官方提供的示例程序:具体位于..\opencv\sources\samples\cpp ..\opencv\sources\samples\cpp\tutorial_code路径下存…...
ABP VNext种子数据按顺序插入
ABP VNext种子数据按顺序插入 1.Domain层1.1 新加Author和Book实体1.2 CustomDataSeedDbMigrationService新加方法1.3新加ISowSeed接口1.4 作者和图书种子数据逻辑1.5 新加CustomDataSeedDataSeederContributor 2.EntityFrameworkCore2.1 CustomDataSeedDbContext2.2 生成迁移脚…...
Verilog | FIFO简单实现
FIFO( First Input First Output)简单说就是指先进先出,也是缓存机制的一种,下面是我总结的 FIFO 的三大用途: 1)提高传输效率,增加 DDR 带宽的利用率。比如我们有 4 路视频数据缓存到 DDR 中去,比较笨的方法是&#x…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
Oracle11g安装包
Oracle 11g安装包 适用于windows系统,64位 下载路径 oracle 11g 安装包...
LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用
中达瑞和自2005年成立以来,一直在光谱成像领域深度钻研和发展,始终致力于研发高性能、高可靠性的光谱成像相机,为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...
从物理机到云原生:全面解析计算虚拟化技术的演进与应用
前言:我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM(Java Virtual Machine)让"一次编写,到处运行"成为可能。这个软件层面的虚拟化让我着迷,但直到后来接触VMware和Doc…...
【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL
ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...
【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型
在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重,适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解,并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...
