当前位置: 首页 > news >正文

uniapp视频禁止用户推拽进度条并保留进度条显示的解决方法——方案二

        在uniapp项目中,使用<video>组件播放视频非常方便。默认情况下,视频组件会显示进度条,用户可以随意拖动进度条来控制视频播放进度。然而,在某些特定场景,如在线教育、广告宣传等,我们希望禁止用户拖动进度条,以保持内容的连贯性。那么,如何实现这一功能呢?

        上一篇文章给大家介绍了通过隐藏原生进度条然后自定义一个进度条的方式来实现禁止拖拽视频进度的方法。今天给大家介绍另外一种方式,通过判断判断用户当前视频进度与实际观看时间的差值,来确定用户是否使用了拖拽,如果差别过大,就将视频跳转到实际观看时间。

        以下是具体的实现步骤:

实现步骤:

1、引入视频组件

首先,在页面的.vue文件中引入<video>组件,并设置相关属性。

<template><view><video id="myVideo" :initial-time="initial_time"show-progress=false enable-progress-gesture=false@timeupdate="bindtimeupdate"@ended="ended" class="top-img":src="mp4Url"></video></view>
</template>

其中, @timeupdate是一个事件处理器,它用于监听视频播放进度的更新。当视频播放时,该事件会周期性地被触发,以通知开发者视频当前的播放时间(currentTime)已经改变。

2、创建视频上下文对象

	onLoad((options) => {videoContext.value = uni.createVideoContext('myVideo')})

3、定义响应式变量并初始化视频观看时间:

    const video_real_time = ref(0) //实际播放进度const initial_time = ref(0) //该用户看到的位置const videoTime = ref(0) //视频时间长度const videoContext = ref('') //用来存储video对象const watchTime = ref(0) //实际观看时间onShow(() => {// 调用接口取到该用户播放的位置(秒)// 这里的0代指从接口放回的时间watchTime.value = 0initial_time.value = 0})

 

 4、在bindtimeupdate事件中判断时间差

const bindtimeupdate = (e) => {videoTime.value = parseInt(e.detail.duration)// 记录用户当前视频进度const jumpTime = parseInt(e.detail.currentTime)// 判断用户当前视频进度比实际观看时间差别,这里只判断了用户快进if (jumpTime - watchTime.value > 3) {// 差别过大,调用seek方法跳转到实际观看时间videoContext.value.seek(watchTime.value)videoContext.value.play()} else {video_real_time.value = parseInt(e.detail.currentTime)if (video_real_time.value > watchTime.value) {watchTime.value = video_real_time.value}}}

总结: 

        以上方法主要是通过判断用户当前的视频播放进度jumpTime与之前记录的实际观看时间watchTime.value的差值大于3秒,则意味着用户进行了快进操作。如果用户快进了,则调用videoContext.value.seek(watchTime.value)方法将视频的播放位置跳转回之前记录的实际观看时间,然后调用videoContext.value.play()重新开始播放视频。 

        希望本文对你有所帮助!

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • AI 驱动旅游创业新机遇,旅游卡与共享旅游的融合发展
  • Java面试题之JVM20问
  • 进阶:反转二叉树的奇数层
  • SLF4J报错log4j又报错
  • 【C++】入门基础知识-1
  • 【C#生态园】构建高效PDF应用:全面解析C#六大PDF生成库
  • 2024最新国内镜像源设置(npm、yarn、pnpm)
  • 皮肤病检测-目标检测数据集(包括VOC格式、YOLO格式)
  • 【系统架构设计师】专题:软件工程基础
  • CAT1 RTU软硬件设计开源资料分析(TCP协议+Modbus协议+GNSS定位版本 )
  • 数据仓库ETL开发规范
  • MISC - 第二天(wireshark,base64解密图片,zip文件伪加密,LSB二进制最低位,ARCHPR工具)
  • 计算机网络1
  • django drf 统一Response格式
  • 【机器学习(十一)】机器学习分类案例之是否患糖尿病预测—XGBoost分类算法—Sentosa_DSML社区版
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • Angularjs之国际化
  • avalon2.2的VM生成过程
  • Codepen 每日精选(2018-3-25)
  • Javascript设计模式学习之Observer(观察者)模式
  • React as a UI Runtime(五、列表)
  • 从零开始在ubuntu上搭建node开发环境
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 多线程 start 和 run 方法到底有什么区别?
  • 分享一个自己写的基于canvas的原生js图片爆炸插件
  • 高性能JavaScript阅读简记(三)
  • 构建工具 - 收藏集 - 掘金
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 前端_面试
  • 思考 CSS 架构
  • 智能合约开发环境搭建及Hello World合约
  • FaaS 的简单实践
  • Hibernate主键生成策略及选择
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #include<初见C语言之指针(5)>
  • #Linux(帮助手册)
  • (12)Linux 常见的三种进程状态
  • (4)logging(日志模块)
  • (二)学习JVM —— 垃圾回收机制
  • (附源码)c#+winform实现远程开机(广域网可用)
  • (强烈推荐)移动端音视频从零到上手(下)
  • (十) 初识 Docker file
  • (四)c52学习之旅-流水LED灯
  • (算法)Game
  • (一)十分简易快速 自己训练样本 opencv级联haar分类器 车牌识别
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转载)(官方)UE4--图像编程----着色器开发
  • .DFS.
  • .gitignore文件---让git自动忽略指定文件
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .Net 中Partitioner static与dynamic的性能对比