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
  • 相关阅读:
    Metinfo 5.x 管理员密码重置漏洞
    【CVE-2018-11116】openwrt rpcd 配置文件错误导致访问控制失效
    openwrt-rpcd服务ACL配置错误风险分析
    黑客基础知识
    渗透测试(漏洞利用)
    Niagara物联网框架机制二(笔记)
    基于kali linux无线网络渗透测试
    渗透测试(漏洞扫描)
    Workbench热水泵系统
    Niagara物联网框架机制一(笔记)
  • 原文地址:https://www.cnblogs.com/lezaizhu/p/13836153.html
Copyright © 2011-2022 走看看