h5 audio 进度条拖动_基于vue3音乐播放器进度条的实现

本文是关于使用Vue3开发web音乐播放器的实践记录,主要探讨如何实现进度条显示和拖动定位功能。通过html的input range组件结合Vue的props进行数据交互,解决拖动进度条时数据冲突的问题。通过$watch监听和unwatch取消监听,实现了在拖动进度条时不接收video的currentTime,避免干扰。
摘要由CSDN通过智能技术生成

一、简介

一些零基础小白学习vue3的开发记录,目标实现web端音乐播放器。github开发代码,欢迎一起交流学习。

二、相关准备

需求分析:

  1. 歌曲播放时,显示进度条,随着时间一起前进
  2. 拖动进度条,能够定位到歌曲对位位置播放
  • 说到进度条,在html里面首先想到的是input组件,其中的range类型,通过vue的props传递属性可以很方便的实现想要的功能。
  • 拖动进度条首先想到的vue的双向绑定,但这里有个问题就是:双向绑定数据后拖动改变时间,但是歌曲还在播放,穿过来的数据导致进度条向前。两者有明显冲突。

三、实现过程

滚动条的显示

获取相关数据

需要用到的

相关代码如下:

a2e63d93bc1b03f147368e2780c072ed.png

利用数据显示进度条

这里查阅相关文档修改进度条样式,相关style这里不显示了。然后对通过props接收到的值进行显示也没有问题。

相关代码如下:

e5f7066ede175cfba90e1d18bd8bccc3.png

拖动进度条定位功能的实现

这里首先考虑到分析过的问题2,决定再显示一个一样的input标签,绑定临时定义的变量进行单向控制。也就是从video传过来的值显示一个进度条,临时进度条拖动后双向绑定的值传回给video设置currentTime。

然后测试了之后经过分析还是发现不能通过双向绑定实现,这样数据流形成了闭环,拖动产生的Time和传过来currentTime会相互干扰

分析过后,觉得只要没有控制的时候接收传过来的currentTime,但是控制的时候取消接收,这时候将拖动产生的Time传给video进行设置就行了。

在vue文档中查了一下,$watch这个实例方法监听的时候会返回一个unwatch取消监听函数,那么就很容易实现想要的功能了。

相关代码如下,其中上面绑定的v-model="currentTime"需要去掉:

028229c585e94241a63368395e909e9d.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值