vue 配合 video.js 实现视频播放

1. 导入 video.js 包

npm install video.js -S

 npm install videojs-flash -S
 

2. 代码实现

<template><div><videoid="my-video"class="video-js"controlspreload="auto"width="640"height="264":poster="videoTitleImg"data-setup="{}"ref="videoPlayer"><source :src="videoSrc" type="video/mp4"/><source src="MY_VIDEO.webm" type="video/webm"/><div class="video-progress" @mousedown="onProgressMouseDown"><div class="video-played" ref="progressBar"></div></div><p class="vjs-no-js">To view this video please enable JavaScript, and consider upgrading to aweb browser that<a href="https://videojs.com/html5-video-support/" target="_blank">supports HTML5 video</a></p></video></div>
</template><script>
import videoJs from 'video.js'export default {props: {videoTitleImg: '',videoSrc: ''},data () {return {dragging: false}},methods: {// onProgressMouseDown (event) {//   this.dragging = true//   this.startX = event.clientX//   this.startTime = this.player.currentTime()//   document.addEventListener('mousemove', this.onProgressMouseMove)//   document.addEventListener('mouseup', this.onProgressMouseUp)// },// onProgressMouseMove (event) {//   if (this.dragging) {//     console.log('xxxxx', event, 'progressBar', this.$refs.progressBar.parentNode)//     const deltaX = event.clientX - this.startX//     const ratio = deltaX / this.$refs.progressBar.parentNode.offsetWidth//     const newTime = this.startTime + ratio * this.player.duration()//     this.player.currentTime(newTime)//   }// },// onProgressMouseUp () {//   this.dragging = false//   document.removeEventListener('mousemove', this.onProgressMouseMove)//   document.removeEventListener('mouseup', this.onProgressMouseUp)// }},mounted () {this.player = videoJs(this.$refs.videoPlayer)// 监听进度条拖动事件this.player.on('timeupdate', (time) => {if (this.player.userActive()) {// 用户正在拖动进度条// 可以在这里执行你需要的操作}})},beforeDestroy () {if (this.player) {this.player.dispose()}}
}
</script>
<style scoped>
.video-progress {position: relative;width: 100%;height: 5px;background-color: #e5e5e5;cursor: pointer;
}.video-played {position: absolute;left: 0;height: 100%;background-color: #3e8f3e;
}
</style>

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

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

相关文章

form1弹出子窗体form2,拖动子窗体判断是否离开父窗体区域,含源码(学习笔记)

一、效果&#xff08;进入和离开&#xff09; 子窗体到达父窗体边缘时变色。 二、代码分析 判断父窗体的目的&#xff0c;可以控制子窗体要随父窗体走。上面代码需要加以处理。 如&#xff1a;this.Location new Point(parentPoint.X distanceFromEdge, this.Location.Ydis…

抖音上线“星绘”APP,它有着什么样的特殊之处?

抖音上线“星绘”APP 前言 就在4月25日&#xff0c;抖音在App Store上线了一款名为“星绘”的App。该App以妙鸭相机为对标产品&#xff0c;拥有着强大的AI生图能力&#xff0c;而产品中的“AI分身”也十分有特色&#xff0c;那么这款“星绘”App究竟如何呢&#xff1f;我们接着…

2024最新UI发卡盗U/支持多语言/更新UI界面/支持多个主流钱包

本文来自&#xff1a;2024最新UI发卡盗U/支持多语言/更新UI界面/支持多个主流钱包 - 源码1688 应用介绍 简介&#xff1a; 2024最新UI发卡盗U/支持多语言/更新UI界面/支持多个主流钱包 自行检查后门&#xff0c;最好是部署智能合约后用合约地址来授权 包含转账支付页面盗U授…

Dokcer容器分布式搭建LNMP+wordpress论坛

目录 引言 一、架构环境 二、搭建容器 &#xff08;一&#xff09;自定义网络 &#xff08;二&#xff09;搭建nginx容器 1.文件准备 2.查看与编辑文件 3.生成镜像 4.创建容器 &#xff08;三&#xff09;搭建MySQL容器 1.文件准备 2.查看与编辑文件 3.生成镜像 …

python自动化操作docx

使用Python自动化处理Word文档 在日常工作中&#xff0c;我们经常需要处理大量的Word文档&#xff0c;这时自动化脚本就显得尤为重要。本文将介绍如何使用Python中的python-docx库来创建和修改Word文档。 安装python-docx库 在开始之前&#xff0c;确保你已经安装了python-d…

LabVIEW自动剪板机控制系统

LabVIEW自动剪板机控制系统 随着工业自动化的快速发展&#xff0c;钣金加工行业面临着生产效率和加工精度的双重挑战。传统的手动或脚踏式剪板机已无法满足现代生产的高效率和高精度要求&#xff0c;因此&#xff0c;自动剪板机控制系统的研究与开发成为了行业发展的必然趋势。…

解决Uncaught TypeError: Cannot read properties of null (reading ‘getAttribute‘)

问题&#xff1a; 用了element ui 的echart ,初始化时候找不到指定id的元素&#xff0c;导致的问题&#xff0c;如下 浏览器控制台输出的错误信息如下 Echars echarts.min.js:22 Uncaught TypeError: Cannot read properties of null (reading getAttribute)at echarts.min.…

动手学深度学习——从零实现softmax分类模型

1. 数据集 fashion mnist是一个由10个类别图像组成的服装分类数据集&#xff0c;共包含60000张训练集图像和10000张测试集图像&#xff0c; 前者用于训练模型参数&#xff0c;后者用于评估模型性能。 2.1 数据集下载 先进行依赖库导入&#xff1a; %matplotlib inline …

图像识别应用技术

⚠申明&#xff1a; 未经许可&#xff0c;禁止以任何形式转载&#xff0c;若要引用&#xff0c;请标注链接地址。 全文共计3077字&#xff0c;阅读大概需要3分钟 &#x1f308;更多学习内容&#xff0c; 欢迎&#x1f44f;关注&#x1f440;【文末】我的个人微信公众号&#xf…

Akamai 分布式“云+边缘”,打造下一代数字化基座

当下&#xff0c;数字化基础设施正逐步向分布式部署演化&#xff0c;云计算与边缘计算正在成为两大技术支柱。Gartner 数据显示&#xff0c;云服务占 IT 整体支出比例连年上涨&#xff0c;在过去一年已增长至12.1%&#xff1b;IDC 报告显示&#xff0c;截至2021年已有超过500亿…

Grafana页面嵌入自建Web应用页面

目录 一、应用场景 二、实现方式 1、修改Grafana配置文件 2、获取监控页面url 3、隐藏左侧和顶部菜单 一、应用场景 需要将Grafana监控页面嵌入自建Web应用页面&#xff0c;使Grafana监控页面成为自建Web应用的一部分。 二、实现方式 总体思路&#xff1a;修改Grafana配…

行列式求解

行列式 给出一个矩阵求 行列式。 输入&#xff1a; 1 3 1 -2 -1 0 3 2 3 1 -1 思路&#xff1a; 不能直接乘上上面行的倍数来消除本行对应元素。试试辗转相减法把。 (1,3)减去2倍(0,1)->(1,0) (5,3)减去0倍(3,5)减去1倍(2,3)减去1倍(1,2)减去2倍(0,1)->(1,0) 然…

其他细节配置

文章目录 contextoutputlibrarylibraryTarget targetmodule.noParseresolvemodulesextensionsalias externalsstats context context: path.resolve(__dirname, "app")该配置会影响入口和loaders的解析&#xff0c;入口和loaders的相对路径会以context的配置作为基准…

mybatix常见查询

使用MyBatis进行复杂SQL查询和操作是一种常见的需求&#xff0c;这通常涉及到动态SQL的使用。在MyBatis中&#xff0c;你可以使用XML映射文件或注解来构建这些复杂的SQL语句。以下是一些示例&#xff0c;覆盖你所提及的动态查询分页、分组、多表联查等情况。 动态查询分页 在M…

C++之STL-list+模拟实现

目录 一、list的介绍和基本使用的方法 1.1 list的介绍 1.2 list的基本使用方法 1.2.1 构造方法 1.2.2 迭代器 1.2.3 容量相关的接口 1.2.4 增删查改的相关接口 1.3 关于list迭代器失效的问题 二、模拟实现list 2.1 节点类 2.2 迭代器类 2.3 主类list类 2.3.1 成员变…

C++——数据类型笔记

在C编程中&#xff0c;了解各类数据类型也是至关重要的。下面我会总结一下C中的数据类型&#xff0c;包括基本类型&#xff0c;符合类型和自定义类型。方便自己整理和理解。 &#xff11;&#xff0c;基本类型 C中的基本类型是构建其他数据类型的基础&#xff0c;常见的基础类…

深圳消费扩容提质行动初见成效:多领域消费增长,商业环境持续优化

深圳市政府新闻办于近日召开发布会&#xff0c;深圳市商务局局长张非梦介绍了深圳市实施消费扩容提质行动的相关情况。根据发布会的内容&#xff0c;深圳市在今年一季度的消费市场展现出新气象和新活力&#xff0c;社消零总额达到2463.8亿元&#xff0c;其中新能源汽车、文化办…

多线程同步

1.多线程并发 1).多线程并发引例 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <assert.h> #include <pthread.h>int wg0; void *fun(void *arg) {for(int i0;i<1000;i){wg;printf("wg%d\n",wg);} } in…

tp6.0 rabbitmq死信队列

rabbitMq交换机&#xff0c;队列情况&#xff0c;先手动创建 1. 创建普通交换机exchange&#xff0c;普通队列order_queue_expire&#xff0c;队列设置属性&#xff1a; 消息过期时间&#xff1a;60000毫秒&#xff0c;过期绑定dead_exchange交换机&#xff0c;routing_key:de…

适配器模式(不同类型的 MQ 消息 首次下单消息)

目录 定义 适配不同类型的 MQ 消息 注册开户MQ 内部订单MQ 第三⽅订单MQ 查询⽤户内部下单数量接⼝ 查询⽤户第三⽅下单⾸单接⼝ MQ消息体适配类 代码实现 测试验证 接⼝使⽤适配 代码实现 分别实现两个不同的接⼝ 内部商品接⼝ 第三⽅商品接⼝ 测试验证 定义 …