实现网易云项目反馈歌曲播放进度时间功能
一、实现原理
- 计时器setTimeout包装成setInterval
- 放计时器与清楚计时器时候的数据
- 全局状态管理来记录当前播放的值
- 播放/暂停/切换播放的时候的行为
二、具体实现步骤
2.1 计时器setTimeout包装成setInterval
function _setInterval (callback, delay = 1000, timerId) {
while (timerId.length) {
clearTimeout(timerId[0])
timerId.shift()
}
function fn () {
callback()
const prevTimerId = timerId[0]
clearTimeout(prevTimerId)
while (timerId.length) {
timerId.shift()
}
timerId.push(setTimeout(fn, delay))
}
timerId.push(setTimeout(fn, delay))
}
2.2 放计时器与清楚计时器时候的数据
Vue.prototype.$timerId = []
- 选择放在Vue的属性中
2.3 全局状态管理来记录当前播放的值
- state 里面存放一个currentTime来记录
- mutations中的代码
[types.ADD_TIMER] (state) {
state.playInfo.currentTime++
}
2.4 播放/暂停/切换播放的时候的行为
- 播放的时候重新开启加速器
- 暂停的时候clear掉加速器
- 切换的时候把currentTime设置为0