iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >vue中怎么使用SVG实现圆形进度条音乐播放
  • 795
分享到

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

2023-06-29 20:06:43 795人浏览 泡泡鱼
摘要

今天小编给大家分享一下Vue中怎么使用SVG实现圆形进度条音乐播放的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。效果图:实现

今天小编给大家分享一下Vue中怎么使用SVG实现圆形进度条音乐播放的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

效果图:

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

实现过程

一、实现步骤

  • 圆形进度条的实现

  • 音乐播放/暂停的控制

二、步骤分解

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

<audio src="/static/audiOS/周兴哲 - 你,好不好?.mp3" @timeupdate="timeupdate" id="audio" @ended="ended"></audio>// 实时获取音频当前播放时长    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;    },

圆形进度条的实现

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

<svg xmlns="Http://www.w3.org/2000/svg" width="100%" height="100%" id="mySvg">            <circle class="progress-background" cx="50%" cy="50%" r="50%" fill="transparent" />            <circle              class="progress-bar"              cx="50%"              cy="50%"              r="50%"              fill="transparent"              :stroke-dasharray="dashArray"              :stroke-dashoffset="dashOffset"            />        </svg>        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;            });          }

音乐播放/暂停的控制

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

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

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

<template>  <div class="playmusic">    <div class="bottom-music">      <div class="music-lt">        <div class="lt-avator">          <img src="/static/img/avator.jpg" alt />        </div>        <div class="lt-title">          <span class="title">你,好不好?</span>          <span class="name">周兴哲</span>        </div>      </div>      <div class="music-rt">        <div class="progress-circle" id="progressCircle" @click="operation">          <svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" id="mySvg">            <circle class="progress-background" cx="50%" cy="50%" r="50%" fill="transparent" />            <circle              class="progress-bar"              cx="50%"              cy="50%"              r="50%"              fill="transparent"              :stroke-dasharray="dashArray"              :stroke-dashoffset="dashOffset"            />          </svg>          <span            :class="isStatus?'iconfont icon-bofang3 icons':'iconfont icon-bofang2 icons icons1'"          ></span>        </div>        <span class="iconfont icon-yinleliebiao menu"></span>        <audio src="/static/audios/周兴哲 - 你,好不好?.mp3" @timeupdate="timeupdate" id="audio" @ended="ended"></audio>      </div>    </div>  </div></template><script>export default {  data() {    return {      dashArray: 0,      current: 0,      dashOffset: 0,      isStatus: false // 播放状态  false 暂停  true 播放    };  },  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;      }    }  },  methods: {    // 实时获取音频当前播放时长    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;    },    // 操作音乐播放/暂停    operation() {      console.log("播放/暂停音乐");      let audio = document.getElementById("audio");      console.log("this.audio.paused===>", audio.paused);      if (audio.paused) {        audio.play();        this.isStatus = true;      } else {        audio.pause();        this.isStatus = false;      }    }  },  mounted() {    this.$nextTick(() => {      // 初始化圆的周长      let circleWidth = document.getElementById("progressCircle").offsetWidth;      this.dashArray = Math.PI * circleWidth;      this.dashOffset = Math.PI * circleWidth;    });  }};</script><style lang="CSS" scoped>.font {  font-family: PingFangSC-Regular, PingFang SC;  font-weight: 400;}.playmusic {  position: relative;  height: 100vh;  width: 100%;}.playmusic .bottom-music {  box-sizing: border-box;  padding: 0 0.64rem;  z-index: 999;  box-shadow: 5px 5px 5px 5px #efefef, -5px 5px 5px 5px rgba(255, 255, 255, 0.5);}.playmusic .bottom-music {  height: 3.41333333rem;  width: 100%;  position: fixed;  left: 0;  bottom: 0;  display: flex;  justify-content: space-around;  align-items: center;  background-color: #ffffff;}.playmusic .bottom-music .music-lt {  flex: 1;  display: flex;  align-items: center;  justify-content: start;  width: 70%;  overflow: hidden;}.playmusic .bottom-music .music-lt .lt-avator {  width: 2.13333333rem;  height: 2.13333333rem;  border-radius: 50%;  overflow: hidden;}.playmusic .bottom-music .music-lt .lt-avator img {  width: 100%;  height: 100%;  display: block;}.playmusic .bottom-music .music-lt .lt-title {  padding: 0 0.42666667rem;  width: 80%;}.playmusic .bottom-music .music-lt .lt-title span {  display: block;  overflow: hidden;  white-space: nowrap;  text-overflow: ellipsis;  font-family: PingFangSC-Regular, PingFang SC;  font-weight: 400;}.playmusic .bottom-music .music-lt .lt-title .title {  font-size: 0.59733333rem;  font-weight: 600;  color: #333;}.playmusic .bottom-music .music-lt .lt-title .name {  font-size: 0.46933333rem;  color: #666;}.playmusic .bottom-music .music-rt {  display: flex;  justify-content: end;  align-items: center;}.playmusic .bottom-music .music-rt .progress-circle {  width: 1.92rem;  height: 1.92rem;  position: relative;}.playmusic .bottom-music .music-rt .progress-circle circle {  stroke-width: 0.14933333rem;  transfORM-origin: center;}.playmusic .bottom-music .music-rt .progress-circle .progress-background {  transform: scale(0.9);  stroke: rgba(212, 68, 57, 0.5);}.playmusic .bottom-music .music-rt .progress-circle .progress-bar {  transform: scale(0.9) rotate(-90deg);  stroke: #d44439;}.playmusic .bottom-music .music-rt .progress-circle .icons {  position: absolute;  top: 50%;  left: 50%;  transform: translate(-50%, -50%);  color: #d44439;}.playmusic .bottom-music .music-rt .progress-circle .icons {  font-size: 1.17333333rem;}.playmusic .bottom-music .music-rt .progress-circle .icons1 {  font-size: 0.96rem;}.playmusic .bottom-music .music-rt .menu {  font-size: 1.70666667rem;  color: #d44439;  font-weight: 500;}.playmusic .bottom-music .music-rt .menu {  padding-left: 0.85333333rem;}</style>

以上就是“vue中怎么使用SVG实现圆形进度条音乐播放”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

--结束END--

本文标题: vue中怎么使用SVG实现圆形进度条音乐播放

本文链接: https://www.lsjlt.com/news/326391.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue使用SVG实现圆形进度条音乐播放
    最近在使用vue做仿网易云音乐的项目,遇到了圆形进度条实现音乐播放的功能,所以我在这里总结一下,分享给大家我的实现方法。我这里主要是通过SVG的方式实现的。 效果图: 实现过程 一...
    99+
    2022-11-13
  • vue中怎么使用SVG实现圆形进度条音乐播放
    今天小编给大家分享一下vue中怎么使用SVG实现圆形进度条音乐播放的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。效果图:实现...
    99+
    2023-06-29
  • 怎么用Android View实现圆形进度条
    本篇内容主要讲解“怎么用Android View实现圆形进度条”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用Android View实现圆形进度条”吧!主要涉及到下面几个方法://&nbs...
    99+
    2023-06-20
  • 使用 css3怎么实现一个圆形进度条
    使用 css3怎么实现一个圆形进度条?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。html代码<div class="progressbar&qu...
    99+
    2023-06-08
  • Android studio中怎么实现一个圆形进度条
    Android studio中怎么实现一个圆形进度条,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。MainActivityimport android.support...
    99+
    2023-05-30
    android studio
  • 怎么使用C语言实现音乐播放器
    本文小编为大家详细介绍“怎么使用C语言实现音乐播放器”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么使用C语言实现音乐播放器”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。介绍该程序是一个小的DEMO,实现了以...
    99+
    2023-07-05
  • 使用canvas怎么实现一个圆形进度条动画
    这期内容当中小编将会给大家带来有关使用canvas怎么实现一个圆形进度条动画,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1. canvas的HTML部分很简单就一个canvas标签canvas画布的宽高...
    99+
    2023-06-09
  • Android:在service和activity之中,实现音乐播放进度条传递信息的两种方式
    实现播放时的进度条显示,或是定时从service获取某些信息,是我们日常开发中经常遇到的需求,下面介绍当音乐再service中运行时,activ...
    99+
    2022-06-06
    service 进度条 activity 音乐 Android
  • 怎么在Android中使用Service方法实现本地音乐播放
    这篇文章给大家介绍怎么在Android中使用Service方法实现本地音乐播放,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。主Activity控制音乐 的开始、暂停、停止、退出空能,(具体实现在下面MusicServi...
    99+
    2023-06-14
  • 怎么在Android中利用SeekBar实现音乐播放器功能
    怎么在Android中利用SeekBar实现音乐播放器功能?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一.Demo简介 利用AIDL为Activity绑定服务,...
    99+
    2023-05-31
    android seekbar roi
  • 怎么在html中使用svg生成一个环形进度条法
    怎么在html中使用svg生成一个环形进度条法?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。<svg width="150px&quo...
    99+
    2023-06-09
  • 怎么在css3中使用clip实现一个圆环进度条
    这期内容当中小编将会给大家带来有关怎么在css3中使用clip实现一个圆环进度条,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。实现思路圆环很简单,一行cssborder-radius:50%即可实现,而且...
    99+
    2023-06-08
  • 怎么在Vue中利用node实现音频录制播放功能
    本篇文章给大家分享的是有关怎么在Vue中利用node实现音频录制播放功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。vue部分:安装recorderxcnpm in...
    99+
    2023-06-14
  • 微信小程序怎么使用slider实现音频进度条
    这篇文章主要介绍了微信小程序怎么使用slider实现音频进度条的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇微信小程序怎么使用slider实现音频进度条文章都会有所收获,下面我们一起来看看吧。微信小程序的sli...
    99+
    2023-07-02
  • Python中怎么使用Flask实现进度条
    本篇内容主要讲解“Python中怎么使用Flask实现进度条”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python中怎么使用Flask实现进度条”吧!使用Flask实现进度条问题描述Pyth...
    99+
    2023-06-30
  • vue中怎么使用h5 video标签实现弹窗播放本地视频
    这篇“vue中怎么使用h5 video标签实现弹窗播放本地视频”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作