vue使用SVG实现圆形进度条音乐播放

最近在使用vue做仿网易云音乐的项目,遇到了圆形进度条实现音乐播放的功能,所以我在这里总结一下,分享给大家我的实现方法。我这里主要是通过SVG的方式实现的。

效果图:

实现过程

一、实现步骤

  • 圆形进度条的实现
  • 音乐播放/暂停的控制

二、步骤分解

这里先放一下 audio标签引入音频文件的代码:



/*
    timeupdate() 方法   实时获取 音频当前播放时长
    ended() 方法   播放结束的时候触发
*/

// 实时获取音频当前播放时长
    timeupdate(e) {
      // console.log("e===>", e.target.currentTime);
      this.current = e.target.currentTime;
      let duration = document.getElementsByTagName("audio")[0].duration;

      let percent = Math.min(1, this.current / duration);
      this.dashOffset = (1 - percent) * this.dashArray;
    },
    ended() {
      console.log("播放结束~~~");
      this.isStatus = false;
      // 初始化 圆形进度条的周长
      let circleWidth = document.getElementById("progressCircle").offsetWidth;
      this.dashArray = Math.PI * circleWidth;
      this.dashOffset = Math.PI * circleWidth;
    },

1. 圆形进度条的实现

这里通过SVG画两个一模一样的圆,设置一定的宽度,然后第二个圆使用stroke-dasharraystroke-dashoffset来动态控制进度变化情况。stroke-dashoffset的变化情况要结合音乐的时长来设置。


            
            
        

        computed: {
            // 实时监听播放进度
            getDashOffset() {
              let percent = 0;
              if (document.getElementsByTagName("audio")[0]) {
                // 计算播放进度比例
                let duration = document.getElementsByTagName("audio")[0].duration;
                percent = Math.min(1, this.current / duration);
                this.dashOffset = (1 - percent) * this.dashArray;
              } else {
                this.dashOffset = (1 - 0) * this.dashArray;
              }
            }
          },
          mounted() {
            this.$nextTick(() => {
              // 初始化圆角周长
              let circleWidth = document.getElementById("progressCircle").offsetWidth;
              this.dashArray = Math.PI * circleWidth;
              this.dashOffset = Math.PI * circleWidth;
            });
          }

2. 音乐播放/暂停的控制

音乐的暂停和播放状态可以通过document.getElementById("audio").paused来判断,如果返回false则说明当前是播放状态,我们需要触发 document.getElementById("audio").pause()方法实现暂停操作,反之,触发document.getElementById("audio").play()方法实现播放操作。

// 操作音乐播放/暂停
  let audio = document.getElementById("audio");
  console.log("this.audio.paused===>", audio.paused);

  if (audio.paused) {
    audio.play();
  } else {
    audio.pause();
  }

下面方法全部的代码,大家可直接复制到自己的编辑器中运行(记得修改音频路径)



以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

你可能感兴趣的:(vue使用SVG实现圆形进度条音乐播放)