zoukankan      html  css  js  c++  java
  • 实现cloud_music项目反馈歌曲播放进度时间功能

    实现网易云项目反馈歌曲播放进度时间功能

    一、实现原理

    • 计时器setTimeout包装成setInterval
    • 放计时器与清楚计时器时候的数据
    • 全局状态管理来记录当前播放的值
    • 播放/暂停/切换播放的时候的行为

    二、具体实现步骤

    2.1 计时器setTimeout包装成setInterval

    /**
     * @param { Function } callback // 回调触发的函数
     * @param { Number } delay // 设置计时器延迟的时间
     * @param { Array } timerId // 存放计时器的数组, 用数组是因为其引用类型,可以把实参地址传入形参, 为什么用数组因为操作方便
     */
    function _setInterval (callback, delay = 1000, timerId) {
      // 若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
  • 相关阅读:
    iOS开发--UIPickerView(选择器控件) 省份和城市的做法
    UITableView左滑设置更多的按钮
    UITableView的增,删,改例子
    UITableView的简单用法
    Block传值原理
    UIToolbar的简单用法
    用UIScrollView,UIPageControl来实现滚动视图。
    用UIPickerView来显示省和市
    如何设计好的UI控件
    UITextfield属性用法
  • 原文地址:https://www.cnblogs.com/lezaizhu/p/13836153.html
Copyright © 2011-2022 走看看