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

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

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

以下是具体的实现步骤:

实现步骤:

1、引入视频组件

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

html 复制代码
<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、创建视频上下文对象

javascript 复制代码
	onLoad((options) => {
		videoContext.value = uni.createVideoContext('myVideo')
	})

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

javascript 复制代码
    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 = 0
		initial_time.value = 0
	})

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

javascript 复制代码
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()重新开始播放视频。

希望本文对你有所帮助!

相关推荐
英俊潇洒美少年3 小时前
Vue 生产环境打包:SourceMap、压缩、混淆、加密全解 + 最佳实践
前端·javascript·vue.js
巴博尔4 小时前
UNIAPP中NVUE页面 动画
android·前端·javascript·ios·uni-app
猫头虎-前端技术4 小时前
JS 作用域与闭包:从变量提升到闭包陷阱的超详细解析
开发语言·javascript·云计算·bootstrap·ecmascript·openstack·perl
君为先-bey5 小时前
CogVideoX——Transformer从文本到视频的扩散模型
深度学习·音视频·transformer·扩散模型
Raink老师5 小时前
【AI面试临阵磨枪-77】音视频 + AI:实时字幕、翻译、降噪、虚拟人、多模态对话
人工智能·面试·音视频
FrameNotWork6 小时前
HarmonyOS 短视频滑动交互实现:打造流畅的上下切换体验
音视频·交互·harmonyos
她说人狗殊途6 小时前
基于 vue-cli 创建
前端·javascript·vue.js
AZaLEan__7 小时前
前端移动端适配与 Bootstrap
前端·bootstrap·html
大家的林语冰7 小时前
Deno 2.8 正式发布,再次超越 Bun,史上最大的次版本升级诞生!
前端·javascript·node.js
渣渣xiong7 小时前
从零开始:前端转型AI agent直到就业第五十七天-第五十八天
前端·人工智能·python